suppression ninja form legacy
|
|
@ -1,674 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. 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
|
||||
them 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 prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. 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.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey 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;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If 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 convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU 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 that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
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.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
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.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
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
|
||||
state 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 a brief idea of what it does.>
|
||||
Copyright (C) <year> <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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program 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, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU 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. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
# Ninja Forms Legacy
|
||||
|
||||
This Ninja Forms Legacy plugin contains a legacy version of the plugin codebase and is only for existing users who have not upgraded (not to be confused with updated) their Ninja Forms installations since 2016.
|
||||
|
||||
This plugin is temporary and will be sunset/removed from WordPress.org on 31 Dec 2021. It will receive security updates only.
|
||||
|
|
@ -1,337 +0,0 @@
|
|||
[
|
||||
{
|
||||
"title":"Layout and Styles",
|
||||
"image":"assets/img/add-ons/layout-styles.png",
|
||||
"content":"Easily create multi-column form layouts and beautifully styled form elements without mastering CSS.",
|
||||
"link":"https://ninjaforms.com/extensions/layout-styles/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Layout+and+Styles",
|
||||
"plugin":"ninja-forms-style/ninja-forms-style.php",
|
||||
"docs":"https://ninjaforms.com/docs/layouts-and-styles/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Layout+and+Styles+Docs",
|
||||
"version":"3.0.25"
|
||||
},
|
||||
{
|
||||
"title":"MailChimp",
|
||||
"image":"assets/img/add-ons/mail-chimp.png",
|
||||
"content":"Quickly create newsletter signup forms for your MailChimp account.",
|
||||
"link":"https://ninjaforms.com/extensions/mail-chimp/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=MailChimp",
|
||||
"plugin":"ninja-forms-mail-chimp/ninja-forms-mail-chimp.php",
|
||||
"docs":"https://ninjaforms.com/docs/mailchimp/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=MailChimp+Docs",
|
||||
"version":"3.1.6"
|
||||
},
|
||||
{
|
||||
"title":"PayPal Express",
|
||||
"image":"assets/img/add-ons/paypal-express.png",
|
||||
"content":"Use PayPal Express to accept payments using your Ninja Forms.",
|
||||
"link":"https://ninjaforms.com/extensions/paypal-express/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=PayPal+Express",
|
||||
"plugin":"ninja-forms-paypal-express/ninja-forms-paypal-express.php",
|
||||
"docs":"https://ninjaforms.com/docs/paypal-express/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=PayPal+Express+Docs",
|
||||
"version":"3.0.13"
|
||||
},
|
||||
{
|
||||
"title":"File Uploads",
|
||||
"image":"assets/img/add-ons/file-uploads.png",
|
||||
"content":"Add file upload fields to save files to your server or send them to Dropbox or Amazon S3 securely.",
|
||||
"link":"https://ninjaforms.com/extensions/file-uploads/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=File+Uploads",
|
||||
"plugin":"ninja-forms-uploads/file-uploads.php",
|
||||
"docs":"https://ninjaforms.com/docs/file-uploads/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=File+Uploads+Docs",
|
||||
"version":"3.0.19"
|
||||
},
|
||||
{
|
||||
"title":"Salesforce CRM",
|
||||
"image":"assets/img/add-ons/salesforce-crm.png",
|
||||
"content":"Complete, effortless integration between Salesforce and WordPress",
|
||||
"link":"https://ninjaforms.com/extensions/salesforce-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Salesforce+CRM",
|
||||
"plugin":"ninja-forms-salesforce-crm/ninja-forms-salesforce-crm.php",
|
||||
"docs":"https://ninjaforms.com/docs/salesforce-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Salesforce+CRM+Docs",
|
||||
"version":"3.1.0"
|
||||
},
|
||||
{
|
||||
"title":"Conditional Logic",
|
||||
"image":"assets/img/add-ons/conditional-logic.png",
|
||||
"content":"Show or hide fields, change field values, or send specific notifications all based upon user input.",
|
||||
"link":"https://ninjaforms.com/extensions/conditional-logic/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Conditional+Logic",
|
||||
"plugin":"ninja-forms-conditionals/conditionals.php",
|
||||
"docs":"https://ninjaforms.com/docs/conditional-logic/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Conditional+Logic+Docs",
|
||||
"version":"3.0.20"
|
||||
},
|
||||
{
|
||||
"title":"Multi-Part Forms",
|
||||
"image":"assets/img/add-ons/multi-part-forms.png",
|
||||
"content":"Easily break up long forms into multiple pages. ",
|
||||
"link":"https://ninjaforms.com/extensions/multi-part-forms/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Multi-Part+Forms",
|
||||
"plugin":"ninja-forms-multi-part/multi-part.php",
|
||||
"docs":"https://ninjaforms.com/docs/multi-part-forms/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Multi-Part+Forms+Docs",
|
||||
"version":"3.0.22"
|
||||
},
|
||||
{
|
||||
"title":"Stripe",
|
||||
"image":"assets/img/add-ons/stripe.png",
|
||||
"content":"Accept credit cards payments securely and efficiently from your WordPress forms",
|
||||
"link":"https://ninjaforms.com/extensions/stripe/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Stripe",
|
||||
"plugin":"ninja-forms-stripe/ninja-forms-stripe.php",
|
||||
"docs":"https://ninjaforms.com/docs/stripe/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Stripe+Docs",
|
||||
"version":"3.0.18"
|
||||
},
|
||||
{
|
||||
"title":"Front-End Posting",
|
||||
"image":"assets/img/add-ons/front-end-posting.png",
|
||||
"content":"Create posts, pages, or any custom post type from the front-end.",
|
||||
"link":"https://ninjaforms.com/extensions/front-end-posting/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Front-End+Posting",
|
||||
"plugin":"ninja-forms-post-creation/ninja-forms-post-creation.php",
|
||||
"docs":"https://ninjaforms.com/docs/post-creation/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Front-End+Posting+Docs",
|
||||
"version":"3.0.7"
|
||||
},
|
||||
{
|
||||
"title":"User Management",
|
||||
"image":"assets/img/add-ons/user-management.png",
|
||||
"content":"Register and manage WordPress users exclusively with Ninja Forms!",
|
||||
"link":"https://ninjaforms.com/extensions/user-management/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=User+Management",
|
||||
"plugin":"ninja-forms-user-management/ninja-forms-user-management.php",
|
||||
"docs":"https://ninjaforms.com/docs/user-management/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=User+Management+Docs",
|
||||
"version":"3.0.7"
|
||||
},
|
||||
{
|
||||
"title":"Save Progress",
|
||||
"image":"assets/img/add-ons/save-progress.png",
|
||||
"content":"Give users the option to save mid-form and return anytime to finish with Save Progress for Ninja Forms!",
|
||||
"link":"https://ninjaforms.com/extensions/save-progress/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Save+Progress",
|
||||
"plugin":"ninja-forms-save-progress/ninja-forms-save-progress.php",
|
||||
"docs":"https://ninjaforms.com/docs/save-progress/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Save+Progress+Docs",
|
||||
"version":"3.0.13"
|
||||
},
|
||||
{
|
||||
"title":"Campaign Monitor",
|
||||
"image":"assets/img/add-ons/campaign-monitor.png",
|
||||
"content":"Quickly create newsletter signup forms for your Campaign Monitor account. ",
|
||||
"link":"https://ninjaforms.com/extensions/campaign-monitor/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Campaign+Monitor",
|
||||
"plugin":"ninja-forms-campaign-monitor/ninja-forms-campaign-monitor.php",
|
||||
"docs":"https://ninjaforms.com/docs/campaign-monitor/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Campaign+Monitor+Docs",
|
||||
"version":"3.0.5"
|
||||
},
|
||||
{
|
||||
"title":"User Analytics",
|
||||
"image":"assets/img/add-ons/user-analytics.png",
|
||||
"content":"Collect valuable user data on form submission without the hassle of integrating with other services!",
|
||||
"link":"https://ninjaforms.com/extensions/user-analytics/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=User+Analytics",
|
||||
"plugin":"ninja-forms-user-analytics/ninja-forms-user-analytics.php",
|
||||
"docs":"https://ninjaforms.com/docs/user-analytics/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=User+Analytics+Docs",
|
||||
"version":"3.0.0"
|
||||
},
|
||||
{
|
||||
"title":"Constant Contact",
|
||||
"image":"assets/img/add-ons/constant-contact.png",
|
||||
"content":"Quickly create newsletter signup forms for your Constant Contact account.",
|
||||
"link":"https://ninjaforms.com/extensions/constant-contact/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Constant+Contact",
|
||||
"plugin":"ninja-forms-constant-contact/ninja-forms-constant-contact.php",
|
||||
"docs":"https://ninjaforms.com/docs/constant-contact/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Constant+Contact+Docs",
|
||||
"version":"3.0.2"
|
||||
},
|
||||
{
|
||||
"title":"AWeber",
|
||||
"image":"assets/img/add-ons/aweber.png",
|
||||
"content":"Use Ninja Forms to quickly create flexible newsletter signup forms for your AWeber email marketing account.",
|
||||
"link":"https://ninjaforms.com/extensions/aweber/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=AWeber",
|
||||
"plugin":"ninja-forms-aweber/ninja-forms-aweber.php",
|
||||
"docs":"https://ninjaforms.com/docs/aweber/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=AWeber+Docs",
|
||||
"version":"3.0.2"
|
||||
},
|
||||
{
|
||||
"title":"Zoho CRM",
|
||||
"image":"assets/img/add-ons/zoho-crm.png",
|
||||
"content":"Easily integrate your Zoho CRM and convert more inquiries into sales",
|
||||
"link":"https://ninjaforms.com/extensions/zoho-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Zoho+CRM",
|
||||
"plugin":"ninja-forms-zoho-crm/ninja-forms-zoho-crm.php",
|
||||
"docs":"https://ninjaforms.com/docs/zoho-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Zoho+CRM+Docs",
|
||||
"version":"3.0.2"
|
||||
},
|
||||
{
|
||||
"title":"Capsule CRM",
|
||||
"image":"assets/img/add-ons/capsule-crm.png",
|
||||
"content":"Save time to focus on sales with direct, flawless integration with your Capsule CRM account",
|
||||
"link":"https://ninjaforms.com/extensions/capsule-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Capsule+CRM",
|
||||
"plugin":"ninja-forms-capsule-crm/ninja-forms-capsule-crm.php",
|
||||
"docs":"https://ninjaforms.com/docs/capsule-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Capsule+CRM+Docs",
|
||||
"version":"3.2.3"
|
||||
},
|
||||
|
||||
{
|
||||
"title":"Insightly CRM",
|
||||
"image":"assets/img/add-ons/insightly-crm.png",
|
||||
"content":"Create contacts, opportunities, projects, tasks, and notes from your form!",
|
||||
"link":"https://ninjaforms.com/extensions/insightly-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Insightly+CRM",
|
||||
"plugin":"ninja-forms-insightly-crm/ninja-forms-insightly-crm.php",
|
||||
"docs":"https://ninjaforms.com/docs/insightly-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Insightly+CRM+Docs",
|
||||
"version":"3.2.0"
|
||||
},
|
||||
{
|
||||
"title":"PDF Form Submission",
|
||||
"image":"assets/img/add-ons/pdf-form-submissions.png",
|
||||
"content":"Easily create PDF copies of your form submissions",
|
||||
"link":"https://ninjaforms.com/extensions/pdf-form-submissions/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=PDF+Form+Submission",
|
||||
"plugin":"ninja-forms-pdf-submissions/nf-pdf-submissions.php",
|
||||
"docs":"https://ninjaforms.com/docs/pdf/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=PDF+Form+Submission+Docs",
|
||||
"version":"3.0.5"
|
||||
},
|
||||
{
|
||||
"title":"Trello",
|
||||
"image":"assets/img/add-ons/trello.png",
|
||||
"content":"Create Trello cards from your Ninja Forms submissions.",
|
||||
"link":"https://ninjaforms.com/extensions/trello/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Trello",
|
||||
"plugin":"ninja-forms-trello/ninja-forms-trello.php",
|
||||
"docs":"https://ninjaforms.com/docs/trello/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Trello+Docs",
|
||||
"version":"3.0.2"
|
||||
},
|
||||
{
|
||||
"title":"Elavon",
|
||||
"image":"assets/img/add-ons/elavon.png",
|
||||
"content":"A simple, streamlined, and secure way to accept credit card payments in WordPress",
|
||||
"link":"https://ninjaforms.com/extensions/elavon/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Elavon",
|
||||
"plugin":"ninja-forms-elavon-payment-gateway/ninja-forms-elavon-payment-gateway.php",
|
||||
"docs":"https://ninjaforms.com/docs/elavon/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Elavon+Docs",
|
||||
"version":"3.0.0"
|
||||
},
|
||||
{
|
||||
"title":"Zapier",
|
||||
"image":"assets/img/add-ons/zapier.png",
|
||||
"content":"Integrate WordPress with virtually any service in a matter of minutes!",
|
||||
"link":"https://ninjaforms.com/extensions/zapier/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Zapier",
|
||||
"plugin":"ninja-forms-zapier/ninja-forms-zapier.php",
|
||||
"docs":"https://ninjaforms.com/docs/zapier/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Zapier+Docs",
|
||||
"version":"3.0.7"
|
||||
},
|
||||
{
|
||||
"title":"Slack",
|
||||
"image":"assets/img/add-ons/slack.png",
|
||||
"content":"Get Slack notifications every time a user submits a form.",
|
||||
"link":"https://ninjaforms.com/extensions/slack/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Slack",
|
||||
"plugin":"ninja-forms-slack/ninja-forms-slack.php",
|
||||
"docs":"https://ninjaforms.com/docs/slack/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Slack+Docs",
|
||||
"version":"3.0.2"
|
||||
},
|
||||
{
|
||||
"title":"Webhooks",
|
||||
"image":"assets/img/add-ons/webhooks.png",
|
||||
"content":"Send user-submitted data to any external URL using a GET or POST request.",
|
||||
"link":"https://ninjaforms.com/extensions/webhooks/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Webhooks",
|
||||
"plugin":"ninja-forms-webhooks/ninja-forms-webhooks.php",
|
||||
"docs":"https://ninjaforms.com/docs/webhooks/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Webhooks+Docs",
|
||||
"version":"3.0.4"
|
||||
},
|
||||
{
|
||||
"title":"Excel Export",
|
||||
"image":"assets/img/add-ons/excel-export.png",
|
||||
"content":"Export Ninja Forms submissions to an Excel file",
|
||||
"link":"https://ninjaforms.com/extensions/excel-export/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Excel+Export",
|
||||
"plugin":"ninja-forms-excel-export/ninja-forms-excel-export.php",
|
||||
"docs":"https://ninjaforms.com/docs/excel-export/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Excel+Export+Docs",
|
||||
"version":"3.1"
|
||||
},
|
||||
{
|
||||
"title":"WebMerge",
|
||||
"image":"assets/img/add-ons/webmerge.png",
|
||||
"content":"Easily populate PDFs, Excel spreadsheets, Word docs, or PowerPoint shows using webmerge.me.",
|
||||
"link":"https://ninjaforms.com/extensions/webmerge/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=WebMerge",
|
||||
"plugin":"ninja-forms-webmerge/ninja-forms-webmerge.php",
|
||||
"docs":"https://ninjaforms.com/docs/webmerge/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=WebMerge+Docs",
|
||||
"version":"3.0.3"
|
||||
},
|
||||
{
|
||||
"title":"Emma",
|
||||
"image":"assets/img/add-ons/emma.png",
|
||||
"content":"Add users to Emma newsletters using Ninja Forms",
|
||||
"link":"https://ninjaforms.com/extensions/emma/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Emma",
|
||||
"plugin":"ninja-forms-emma/ninja-forms-emma.php",
|
||||
"docs":"https://ninjaforms.com/docs/emma/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Emma+Docs",
|
||||
"version":"3.0.4"
|
||||
},
|
||||
{
|
||||
"title":"ClickSend SMS",
|
||||
"image":"assets/img/add-ons/clicksend-sms.png",
|
||||
"content":"Send a SMS when someone submits your form via ClickSend.",
|
||||
"link":"https://ninjaforms.com/extensions/clicksend-sms/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=ClickSend+SMS",
|
||||
"plugin":"ninja-forms-clicksend/ninja-forms-clicksend.php",
|
||||
"docs":"https://ninjaforms.com/docs/clicksend-sms/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=ClickSend+SMS+Docs",
|
||||
"version":"3.0.1"
|
||||
},
|
||||
{
|
||||
"title":"Twilio SMS",
|
||||
"image":"assets/img/add-ons/twilio-sms.png",
|
||||
"content":"Send a SMS when someone submits your form via Twilio.",
|
||||
"link":"https://ninjaforms.com/extensions/twilio-sms/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Twilio+SMS",
|
||||
"plugin":"ninja-forms-twilio/ninja-forms-twilio.php",
|
||||
"docs":"https://ninjaforms.com/docs/twilio/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Twilio+SMS+Docs",
|
||||
"version":"3.0.1"
|
||||
},
|
||||
|
||||
{
|
||||
"title":"Recurly",
|
||||
"image":"assets/img/add-ons/recurly.png",
|
||||
"content":"Subscribe users to Recurly plans using Ninja Forms!",
|
||||
"link":"https://ninjaforms.com/extensions/recurly/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Recurly",
|
||||
"plugin":"ninja-forms-recurly/ninja-forms-recurly.php",
|
||||
"docs":"https://ninjaforms.com/docs/recurly/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Recurly+Docs",
|
||||
"version":"3.0.3"
|
||||
},
|
||||
{
|
||||
"title":"EmailOctopus",
|
||||
"image":"assets/img/add-ons/emailoctopus.png",
|
||||
"content":"Automation, integration, analytics... EmailOctopus is the email management solution that fills every need, and it's now available for WordPress!",
|
||||
"link":"https://ninjaforms.com/extensions/emailoctopus/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=EmailOctopus",
|
||||
"plugin":"ninja-forms-emailoctopus/ninja-forms-emailoctopus.php",
|
||||
"docs":"https://ninjaforms.com/docs/emailoctopus/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=EmailOctopus+Docs",
|
||||
"version":"3.0.0"
|
||||
},
|
||||
{
|
||||
"title":"PipelineDeals CRM",
|
||||
"image":"assets/img/add-ons/pipelinedeals-crm.png",
|
||||
"content":"Automated, effortless integration with PipelineDeals CRM",
|
||||
"link":"https://ninjaforms.com/extensions/pipelinedeals-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=PipelineDeals+CRM",
|
||||
"plugin":"ninja-forms-zoho-crm/zoho-integration.php",
|
||||
"docs":"https://ninjaforms.com/docs/pipelinedeals-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=PipelineDeals+CRM+Docs",
|
||||
"version":"3.0.1"
|
||||
},
|
||||
{
|
||||
"title":"Highrise CRM",
|
||||
"image":"assets/img/add-ons/highrise-crm.png",
|
||||
"content":"Combine the functional simplicity of Highrise CRM + the power to build lasting customer relationships with your WordPress website.",
|
||||
"link":"https://ninjaforms.com/extensions/highrise-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Highrise+CRM",
|
||||
"plugin":"ninja-forms-highrise-crm/ninja-forms-highrise-crm.php",
|
||||
"docs":"https://ninjaforms.com/docs/highrise-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Highrise+CRM+Docs",
|
||||
"version":"3.0.0"
|
||||
},
|
||||
{
|
||||
"title":"ConvertKit",
|
||||
"image":"assets/img/add-ons/convertkit.png",
|
||||
"content":"Integrate WordPress with ConvertKit seamlessly through your WordPress forms",
|
||||
"link":"https://ninjaforms.com/extensions/convertkit/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=ConvertKit",
|
||||
"plugin":"ninja-forms-convertkit/ninja-forms-convertkit.php",
|
||||
"docs":"https://ninjaforms.com/docs/convertkit/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=ConvertKit+Docs",
|
||||
"version":"3.0.1"
|
||||
},
|
||||
{
|
||||
"title":"IntelligenceWP",
|
||||
"image":"assets/img/add-ons/intelligencewp.png",
|
||||
"content":"Complete Google Analytics Integration for Your WordPress Forms",
|
||||
"link":"https://ninjaforms.com/extensions/intelligencewp/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=IntelligenceWP",
|
||||
"plugin":"ninja-forms-intelligencewp/ninja-forms-intelligencewp.php",
|
||||
"docs":"https://ninjaforms.com/docs/intelligencewp/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=IntelligenceWP+Docs",
|
||||
"version":"3.0.3"
|
||||
},
|
||||
{
|
||||
"title":"OnePageCRM",
|
||||
"image":"assets/img/add-ons/onepage-crm.png",
|
||||
"content":"Integrate WordPress with OnePage CRM seamlessly through your WordPress forms",
|
||||
"link":"https://ninjaforms.com/extensions/onepage-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=OnePageCRM",
|
||||
"plugin":"ninja-forms-onepagecrm/ninja-forms-onepage-crm.php",
|
||||
"docs":"https://ninjaforms.com/docs/onepage-crm/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=OnePageCRM+Docs",
|
||||
"version":"3.0.0"
|
||||
},
|
||||
{
|
||||
"title":"Active Campaign",
|
||||
"image":"assets/img/add-ons/active-campaign.png",
|
||||
"content":"Discover marketing automation that's intelligent, powerful, and easy to use!",
|
||||
"link":"https://ninjaforms.com/extensions/active-campaign/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Active+Campaign",
|
||||
"plugin":"ninja-forms-active-campaign/ninja-forms-active-campaign.php",
|
||||
"docs":"https://ninjaforms.com/docs/activecampaign/?utm_medium=plugin&utm_source=plugin-addons-page&utm_campaign=Ninja+Forms+Addons+Page&utm_content=Active+Campaign+Docs",
|
||||
"version":"3.0"
|
||||
}
|
||||
]
|
||||
|
|
@ -1,432 +0,0 @@
|
|||
|
||||
/*------------------------------------------------------------------------------
|
||||
nf-admin-modal
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
#nf-admin-modal-wrap {
|
||||
display: none;
|
||||
background-color: #fff;
|
||||
-webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
|
||||
box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
|
||||
width: 500px;
|
||||
margin-left: -250px;
|
||||
margin-top: -125px;
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
z-index: 100105;
|
||||
-webkit-transition: height 0.2s, margin-top 0.2s;
|
||||
transition: height 0.2s, margin-top 0.2s;
|
||||
}
|
||||
|
||||
#nf-admin-modal-backdrop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
min-height: 360px;
|
||||
background: #000;
|
||||
opacity: 0.7;
|
||||
filter: alpha(opacity=70);
|
||||
z-index: 100100;
|
||||
}
|
||||
|
||||
#nf-admin-modal {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#nf-admin-modal-wrap.search-panel-visible {
|
||||
height: 500px;
|
||||
margin-top: -250px;
|
||||
}
|
||||
|
||||
#admin-modal-title {
|
||||
background: #fcfcfc;
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
height: 36px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
line-height: 36px;
|
||||
padding: 0 36px 0 16px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#nf-admin-modal-close {
|
||||
color: #666;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
text-align: center;
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#nf-admin-modal-close:before {
|
||||
font: normal 20px/36px 'dashicons';
|
||||
vertical-align: top;
|
||||
speak: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
content: '\f158';
|
||||
}
|
||||
|
||||
#nf-admin-modal-close:hover,
|
||||
#nf-admin-modal-close:focus {
|
||||
color: #2ea2cc;
|
||||
}
|
||||
|
||||
#nf-admin-modal-close:focus {
|
||||
outline: none;
|
||||
-webkit-box-shadow:
|
||||
0 0 0 1px #5b9dd9,
|
||||
0 0 2px 1px rgba(30, 140, 190, .8);
|
||||
box-shadow:
|
||||
0 0 0 1px #5b9dd9,
|
||||
0 0 2px 1px rgba(30, 140, 190, .8);
|
||||
}
|
||||
|
||||
.admin-modal-inside {
|
||||
padding: 0 16px 50px;
|
||||
}
|
||||
|
||||
#nf-admin-modal-wrap.search-panel-visible .admin-modal-inside {
|
||||
padding: 0 16px;
|
||||
position: absolute;
|
||||
top: 36px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 44px;
|
||||
}
|
||||
|
||||
#nf-admin-modal ol,
|
||||
#nf-admin-modal ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#nf-admin-modal-search-toggle:after {
|
||||
display: inline-block;
|
||||
font: normal 20px/1 'dashicons';
|
||||
vertical-align: top;
|
||||
speak: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
content: '\f140';
|
||||
}
|
||||
|
||||
.search-panel-visible #nf-admin-modal-search-toggle:after {
|
||||
content: '\f142';
|
||||
}
|
||||
|
||||
#nf-admin-modal input[type="text"] {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#nf-admin-modal #admin-modal-options {
|
||||
padding: 8px 0 12px;
|
||||
}
|
||||
|
||||
#nf-admin-modal p.howto {
|
||||
margin: 3px 0;
|
||||
}
|
||||
|
||||
#nf-admin-modal p.howto a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
#nf-admin-modal-search-toggle {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#nf-admin-modal label input[type="text"] {
|
||||
margin-top: 5px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
#nf-admin-modal #admin-modal-options label span,
|
||||
#nf-admin-modal #search-panel label span.search-label {
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
text-align: right;
|
||||
padding-right: 5px;
|
||||
max-width: 24%;
|
||||
}
|
||||
|
||||
#nf-admin-modal .admin-modal-search-field {
|
||||
float: left;
|
||||
width: 250px;
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
#nf-admin-modal .admin-modal-search-wrapper {
|
||||
margin: 5px 0 9px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#nf-admin-modal .admin-modal-search-wrapper span {
|
||||
float: left;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
#nf-admin-modal .admin-modal-search-wrapper .spinner {
|
||||
display: none;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
#nf-admin-modal .admin-modal-target {
|
||||
padding: 3px 0 0;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
#nf-admin-modal .admin-modal-target label {
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
#nf-admin-modal .query-results {
|
||||
border: 1px #dfdfdf solid;
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
left: 16px;
|
||||
right: 16px;
|
||||
bottom: 16px;
|
||||
top: 205px;
|
||||
}
|
||||
|
||||
#nf-admin-modal li {
|
||||
clear: both;
|
||||
margin-bottom: 0;
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
color: #333;
|
||||
padding: 4px 6px 4px 10px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#nf-admin-modal .query-notice {
|
||||
padding: 0;
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
background-color: #f7fcfe;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#nf-admin-modal .query-notice .query-notice-default,
|
||||
#nf-admin-modal .query-notice .query-notice-hint {
|
||||
display: block;
|
||||
padding: 6px;
|
||||
border-left: 4px solid #2ea2cc;
|
||||
}
|
||||
|
||||
#nf-admin-modal .unselectable.no-matches-found {
|
||||
padding: 0;
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
background-color: #fef7f1;
|
||||
}
|
||||
|
||||
#nf-admin-modal .no-matches-found .item-title {
|
||||
display: block;
|
||||
padding: 6px;
|
||||
border-left: 4px solid #d54e21;
|
||||
}
|
||||
|
||||
#nf-admin-modal .query-results em {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
#nf-admin-modal li:hover {
|
||||
background: #eaf2fa;
|
||||
color: #151515;
|
||||
}
|
||||
|
||||
#nf-admin-modal li.unselectable {
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
}
|
||||
|
||||
#nf-admin-modal li.unselectable:hover {
|
||||
background: #fff;
|
||||
cursor: auto;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#nf-admin-modal li.selected {
|
||||
background: #ddd;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#nf-admin-modal li.selected .item-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#nf-admin-modal li:last-child {
|
||||
border: none;
|
||||
}
|
||||
|
||||
#nf-admin-modal .item-title {
|
||||
display: inline-block;
|
||||
width: 80%;
|
||||
width: -webkit-calc(100% - 68px);
|
||||
width: calc(100% - 68px);
|
||||
}
|
||||
|
||||
#nf-admin-modal .item-info {
|
||||
text-transform: uppercase;
|
||||
color: #666;
|
||||
font-size: 11px;
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
#nf-admin-modal #search-results,
|
||||
#nf-admin-modal #search-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#nf-admin-modal-wrap.search-panel-visible #search-panel {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#nf-admin-modal .river-waiting {
|
||||
display: none;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
#nf-admin-modal .river-waiting .spinner {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
float: none;
|
||||
}
|
||||
|
||||
#nf-admin-modal .submitbox {
|
||||
padding: 8px 16px;
|
||||
background: #fcfcfc;
|
||||
border-top: 1px solid #dfdfdf;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#nf-admin-modal-cancel {
|
||||
line-height: 25px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#nf-admin-modal-update {
|
||||
line-height: 23px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
#nf-admin-modal-submit {
|
||||
float: right;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@media screen and ( max-width: 782px ) {
|
||||
#nf-admin-modal-wrap {
|
||||
margin-top: -140px;
|
||||
}
|
||||
|
||||
#nf-admin-modal-wrap.search-panel-visible .query-results {
|
||||
top: 235px;
|
||||
}
|
||||
|
||||
.admin-modal-inside {
|
||||
padding: 0 16px 60px;
|
||||
}
|
||||
|
||||
#nf-admin-modal-wrap.search-panel-visible .admin-modal-inside {
|
||||
bottom: 52px;
|
||||
}
|
||||
|
||||
#nf-admin-modal-cancel {
|
||||
line-height: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and ( max-width: 520px ) {
|
||||
#nf-admin-modal-wrap {
|
||||
width: auto;
|
||||
margin-left: 0;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
max-width: 500px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and ( max-height: 520px ) {
|
||||
#nf-admin-modal-wrap {
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
#nf-admin-modal-wrap.search-panel-visible {
|
||||
height: auto;
|
||||
margin-top: 0;
|
||||
top: 10px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.search-panel-visible .admin-modal-inside {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.search-panel-visible #search-panel .query-results {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and ( max-height: 290px ) {
|
||||
#nf-admin-modal-wrap {
|
||||
height: auto;
|
||||
margin-top: 0;
|
||||
top: 10px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.admin-modal-inside {
|
||||
overflow: auto;
|
||||
height: -webkit-calc(100% - 92px);
|
||||
height: calc(100% - 92px);
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
#search-panel .query-results {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
|
||||
#nf-admin-modal .query-results {
|
||||
border: 1px solid #ddd;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07);
|
||||
box-shadow: inset 0 1px 2px rgba(0,0,0,0.07);
|
||||
-webkit-transition: .05s all ease-in-out;
|
||||
transition: .05s all ease-in-out;
|
||||
}
|
||||
|
||||
#nf-admin-modal .query-results:focus {
|
||||
border-color: #5b9dd9;
|
||||
-webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8);
|
||||
box-shadow: 0 0 2px rgba(30,140,190,0.8);
|
||||
}
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
.nf-admin-notice {
|
||||
background: #fff;
|
||||
border-color: #ED494D;
|
||||
border-top: 4px;
|
||||
display: block;
|
||||
min-height: 68px;
|
||||
padding: 10px 40px 10px 145px;
|
||||
position: relative;
|
||||
}
|
||||
.nf-admin-notice a {
|
||||
color: #ED494D;
|
||||
}
|
||||
.nf-notice-logo {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
background-image: url("../images/nf-logo-vert.png");
|
||||
background-size: 125px 83px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 45%;
|
||||
width: 125px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 5px;
|
||||
}
|
||||
.nf-admin-notice > .dashicons {
|
||||
color: #424242;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 40%;
|
||||
}
|
||||
.nf-notice-title {
|
||||
font-size: 24px;
|
||||
margin: 0;
|
||||
}
|
||||
.nf-notice-body {
|
||||
font-weight: normal;
|
||||
margin: 5px 0;
|
||||
}
|
||||
.nf-notice-body:after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
}
|
||||
.nf-notice-body li {
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.nf-notice-body .dashicons {
|
||||
font-size: 17px;
|
||||
}
|
||||
.nf-red {
|
||||
color: #ED494D;
|
||||
}
|
||||
|
|
@ -1,209 +0,0 @@
|
|||
/*!
|
||||
* bootstrap-tokenfield
|
||||
* https://github.com/sliptree/bootstrap-tokenfield
|
||||
* Copyright 2013-2014 Sliptree and other contributors; Licensed MIT
|
||||
*/
|
||||
@-webkit-keyframes 'blink' {
|
||||
0% {
|
||||
border-color: #ededed;
|
||||
}
|
||||
100% {
|
||||
border-color: #b94a48;
|
||||
}
|
||||
}
|
||||
@-moz-keyframes 'blink' {
|
||||
0% {
|
||||
border-color: #ededed;
|
||||
}
|
||||
100% {
|
||||
border-color: #b94a48;
|
||||
}
|
||||
}
|
||||
@keyframes 'blink' {
|
||||
0% {
|
||||
border-color: #ededed;
|
||||
}
|
||||
100% {
|
||||
border-color: #b94a48;
|
||||
}
|
||||
}
|
||||
.tokenfield {
|
||||
height: auto;
|
||||
min-height: 34px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
.tokenfield.focus {
|
||||
border-color: #66afe9;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);
|
||||
}
|
||||
.tokenfield .token {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
border: 1px solid #d9d9d9;
|
||||
background-color: #ededed;
|
||||
white-space: nowrap;
|
||||
margin: -1px 5px 5px 0;
|
||||
height: 22px;
|
||||
vertical-align: top;
|
||||
cursor: default;
|
||||
}
|
||||
.tokenfield .token:hover {
|
||||
border-color: #b9b9b9;
|
||||
}
|
||||
.tokenfield .token.active {
|
||||
border-color: #52a8ec;
|
||||
border-color: rgba(82, 168, 236, 0.8);
|
||||
}
|
||||
.tokenfield .token.duplicate {
|
||||
border-color: #ebccd1;
|
||||
-webkit-animation-name: blink;
|
||||
animation-name: blink;
|
||||
-webkit-animation-duration: 0.1s;
|
||||
animation-duration: 0.1s;
|
||||
-webkit-animation-direction: normal;
|
||||
animation-direction: normal;
|
||||
-webkit-animation-timing-function: ease;
|
||||
animation-timing-function: ease;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
animation-iteration-count: infinite;
|
||||
}
|
||||
.tokenfield .token.invalid {
|
||||
background: none;
|
||||
border: 1px solid transparent;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
border-bottom: 1px dotted #d9534f;
|
||||
}
|
||||
.tokenfield .token.invalid.active {
|
||||
background: #ededed;
|
||||
border: 1px solid #ededed;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.tokenfield .token .token-label {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
padding-left: 4px;
|
||||
vertical-align: top;
|
||||
}
|
||||
.tokenfield .token .close {
|
||||
font-family: Arial;
|
||||
display: inline-block;
|
||||
line-height: 100%;
|
||||
font-size: 1.1em;
|
||||
line-height: 1.49em;
|
||||
margin-left: 5px;
|
||||
float: none;
|
||||
height: 100%;
|
||||
vertical-align: top;
|
||||
padding-right: 4px;
|
||||
}
|
||||
.tokenfield .token-input {
|
||||
background: none;
|
||||
width: 60px;
|
||||
min-width: 60px;
|
||||
border: 0;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
margin-bottom: 6px;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.tokenfield .token-input:focus {
|
||||
border-color: transparent;
|
||||
outline: 0;
|
||||
/* IE6-9 */
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.tokenfield.disabled {
|
||||
cursor: not-allowed;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
.tokenfield.disabled .token-input {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.tokenfield.disabled .token:hover {
|
||||
cursor: not-allowed;
|
||||
border-color: #d9d9d9;
|
||||
}
|
||||
.tokenfield.disabled .token:hover .close {
|
||||
cursor: not-allowed;
|
||||
opacity: 0.2;
|
||||
filter: alpha(opacity=20);
|
||||
}
|
||||
.has-warning .tokenfield.focus {
|
||||
border-color: #66512c;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
|
||||
}
|
||||
.has-error .tokenfield.focus {
|
||||
border-color: #843534;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
|
||||
}
|
||||
.has-success .tokenfield.focus {
|
||||
border-color: #2b542c;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
|
||||
}
|
||||
.tokenfield.input-sm,
|
||||
.input-group-sm .tokenfield {
|
||||
min-height: 30px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
.input-group-sm .token,
|
||||
.tokenfield.input-sm .token {
|
||||
height: 20px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
.input-group-sm .token-input,
|
||||
.tokenfield.input-sm .token-input {
|
||||
height: 18px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.tokenfield.input-lg,
|
||||
.input-group-lg .tokenfield {
|
||||
min-height: 45px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
.input-group-lg .token,
|
||||
.tokenfield.input-lg .token {
|
||||
height: 25px;
|
||||
}
|
||||
.input-group-lg .token-label,
|
||||
.tokenfield.input-lg .token-label {
|
||||
line-height: 23px;
|
||||
}
|
||||
.input-group-lg .token .close,
|
||||
.tokenfield.input-lg .token .close {
|
||||
line-height: 1.3em;
|
||||
}
|
||||
.input-group-lg .token-input,
|
||||
.tokenfield.input-lg .token-input {
|
||||
height: 23px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 6px;
|
||||
vertical-align: top;
|
||||
}
|
||||
.tokenfield.rtl {
|
||||
direction: rtl;
|
||||
text-align: right;
|
||||
}
|
||||
.tokenfield.rtl .token {
|
||||
margin: -1px 0 5px 5px;
|
||||
}
|
||||
.tokenfield.rtl .token .token-label {
|
||||
padding-left: 0px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
/*!
|
||||
* bootstrap-tokenfield
|
||||
* https://github.com/sliptree/bootstrap-tokenfield
|
||||
* Copyright 2013-2014 Sliptree and other contributors; Licensed MIT
|
||||
*/@-webkit-keyframes 'blink'{0%{border-color:#ededed}100%{border-color:#b94a48}}@-moz-keyframes 'blink'{0%{border-color:#ededed}100%{border-color:#b94a48}}@keyframes 'blink'{0%{border-color:#ededed}100%{border-color:#b94a48}}.tokenfield{height:auto;min-height:34px;padding-bottom:0}.tokenfield.focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.tokenfield .token{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;display:inline-block;border:1px solid #d9d9d9;background-color:#ededed;white-space:nowrap;margin:-1px 5px 5px 0;height:22px;vertical-align:top;cursor:default}.tokenfield .token:hover{border-color:#b9b9b9}.tokenfield .token.active{border-color:#52a8ec;border-color:rgba(82,168,236,.8)}.tokenfield .token.duplicate{border-color:#ebccd1;-webkit-animation-name:blink;animation-name:blink;-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.tokenfield .token.invalid{background:0 0;border:1px solid transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-bottom:1px dotted #d9534f}.tokenfield .token.invalid.active{background:#ededed;border:1px solid #ededed;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.tokenfield .token .token-label{display:inline-block;overflow:hidden;text-overflow:ellipsis;padding-left:4px;vertical-align:top}.tokenfield .token .close{font-family:Arial;display:inline-block;line-height:100%;font-size:1.1em;line-height:1.49em;margin-left:5px;float:none;height:100%;vertical-align:top;padding-right:4px}.tokenfield .token-input{background:0 0;width:60px;min-width:60px;border:0;height:20px;padding:0;margin-bottom:6px;-webkit-box-shadow:none;box-shadow:none}.tokenfield .token-input:focus{border-color:transparent;outline:0;-webkit-box-shadow:none;box-shadow:none}.tokenfield.disabled{cursor:not-allowed;background-color:#eee}.tokenfield.disabled .token-input{cursor:not-allowed}.tokenfield.disabled .token:hover{cursor:not-allowed;border-color:#d9d9d9}.tokenfield.disabled .token:hover .close{cursor:not-allowed;opacity:.2;filter:alpha(opacity=20)}.has-warning .tokenfield.focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-error .tokenfield.focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-success .tokenfield.focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.tokenfield.input-sm,.input-group-sm .tokenfield{min-height:30px;padding-bottom:0}.input-group-sm .token,.tokenfield.input-sm .token{height:20px;margin-bottom:4px}.input-group-sm .token-input,.tokenfield.input-sm .token-input{height:18px;margin-bottom:5px}.tokenfield.input-lg,.input-group-lg .tokenfield{min-height:45px;padding-bottom:4px}.input-group-lg .token,.tokenfield.input-lg .token{height:25px}.input-group-lg .token-label,.tokenfield.input-lg .token-label{line-height:23px}.input-group-lg .token .close,.tokenfield.input-lg .token .close{line-height:1.3em}.input-group-lg .token-input,.tokenfield.input-lg .token-input{height:23px;line-height:23px;margin-bottom:6px;vertical-align:top}.tokenfield.rtl{direction:rtl;text-align:right}.tokenfield.rtl .token{margin:-1px 0 5px 5px}.tokenfield.rtl .token .token-label{padding-left:0;padding-right:4px}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
/*!
|
||||
* Copyright (c) 2013 Ben Olson (https://github.com/bseth99/jquery-ui-extensions)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Adapted from Jörn Zaefferer original implementation at
|
||||
* http://www.learningjquery.com/2010/06/a-jquery-ui-combobox-under-the-hood
|
||||
*
|
||||
* And the demo at
|
||||
* http://jqueryui.com/autocomplete/#combobox
|
||||
*/
|
||||
|
||||
.ui-combobox {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
margin-right: 1.8em;
|
||||
position: relative;
|
||||
}
|
||||
.ui-combobox-input {
|
||||
padding: 0.2em;
|
||||
margin: 0;
|
||||
width: 300px;
|
||||
}
|
||||
.ui-combobox-button {
|
||||
position: absolute;
|
||||
width: 1.8em !important;
|
||||
margin: 0;
|
||||
margin-left: -1px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
.ui-combobox-button .ui-button-text {
|
||||
padding: 0em;
|
||||
}
|
||||
.ui-combobox .ui-autocomplete {
|
||||
max-height: 30em;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
.wp-list-table .type-nf_sub ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.download-all {
|
||||
float: right;
|
||||
}
|
||||
#postcustomstuff table td {
|
||||
padding: 0 10px;
|
||||
}
|
||||
#postcustomstuff table input,
|
||||
#postcustomstuff table select,
|
||||
#postcustomstuff table textarea {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#postcustomstuff table input[type=checkbox],
|
||||
#postcustomstuff table input[type=radio] {
|
||||
width: auto;
|
||||
}
|
||||
#postcustomstuff table textarea {
|
||||
height: 150px;
|
||||
}
|
||||
.wrap h2 a {
|
||||
font-size: 16px;
|
||||
}
|
||||
::-webkit-input-placeholder {
|
||||
padding: 2px 5px 4px;
|
||||
}
|
||||
:-moz-placeholder {
|
||||
padding: 2px 5px 4px;
|
||||
}
|
||||
::-moz-placeholder {
|
||||
padding: 2px 5px 4px;
|
||||
}
|
||||
:-ms-input-placeholder {
|
||||
padding: 2px 5px 4px;
|
||||
}
|
||||
#nf_fields {
|
||||
/*background: transparent;
|
||||
border: 0;*/
|
||||
}
|
||||
#postcustomstuff table {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
}
|
||||
#postcustomstuff table tr td:first-child {
|
||||
padding-top: 12px;
|
||||
}
|
||||
|
||||
#nf_fields_save #major-publishing-actions {
|
||||
margin: 10px -12px -12px;
|
||||
}
|
||||
|
||||
.misc-pub-section span {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nf-sub-edit-value {
|
||||
position: relative;
|
||||
}
|
||||
.nf-sub-edit-upload {
|
||||
position: relative;
|
||||
}
|
||||
.nf-sub-edit-upload input[type=text] {
|
||||
padding-right: 48px;
|
||||
}
|
||||
.nf-sub-edit-upload a {
|
||||
background: #333;
|
||||
color: #fff;
|
||||
height: 27px;
|
||||
line-height: 27px;
|
||||
text-decoration: none;
|
||||
padding: 0 10px;
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: -8px;
|
||||
}
|
||||
.nf-sub-edit-upload a:hover {
|
||||
background: #f1f1f1;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.row-actions:not(.custom-row-actions) {
|
||||
display:none;
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
.nf_upgrade .menu-item-handle {
|
||||
cursor: default;
|
||||
}
|
||||
.nf_upgrade .menu-item-handle,
|
||||
.menu-item-settings.menu-item-settings--nf-upgrade {
|
||||
width: 750px;
|
||||
min-width: 50%;
|
||||
max-width: 95%;
|
||||
}
|
||||
.menu-item-settings.menu-item-settings--nf-upgrade {
|
||||
background-color: #FEFEFE;
|
||||
}
|
||||
.ui-progressbar {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
background-color: #DDD;
|
||||
margin-left: -7px;
|
||||
border: 2px solid #CCC;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.progress-label {
|
||||
font-size: .8em;
|
||||
line-height: 12px;
|
||||
position: absolute;
|
||||
left: 40%;
|
||||
top: 4px;
|
||||
}
|
||||
.ui-progressbar-value {
|
||||
height: 20px;
|
||||
background-color: #CCC;
|
||||
-webkit-transition: width 1s linear;
|
||||
-moz-transition: width 1s linear;
|
||||
-ms-transition: width 1s linear;
|
||||
-o-transition: width 1s linear;
|
||||
transition: width 1s linear;
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
.nf-notification-inactive {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
.nf-notification-inactive td,
|
||||
.nf-notification-inactive td ul,
|
||||
.nf-notification-inactive td > a {
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
#ninja_forms_admin .tokenfield {
|
||||
border: 1px solid #ddd;
|
||||
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.07);
|
||||
box-shadow: inset 0 1px 2px rgba(0,0,0,.07);
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
-webkit-transition: .05s border-color ease-in-out;
|
||||
transition: .05s border-color ease-in-out;
|
||||
margin: 1px;
|
||||
padding: 0 5px !important;
|
||||
width: 25em !important;
|
||||
min-height: 34px;
|
||||
/*height: auto !important;*/
|
||||
}
|
||||
#ninja_forms_admin .tokenfield input[type=text] {
|
||||
/*line-height: 33px;
|
||||
height: 26px;*/
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
#ninja_forms_admin .token {
|
||||
margin: 5px 5px 5px 0;
|
||||
}
|
||||
#ninja_forms_admin .token .close {
|
||||
color: #aaa;
|
||||
text-decoration: none;
|
||||
line-height: 1.29em;
|
||||
}
|
||||
#ninja_forms_admin .token .close:hover {
|
||||
color: #666;
|
||||
}
|
||||
|
|
@ -1,141 +0,0 @@
|
|||
/*!
|
||||
* bootstrap-tokenfield
|
||||
* https://github.com/sliptree/bootstrap-tokenfield
|
||||
* Copyright 2013-2014 Sliptree and other contributors; Licensed MIT
|
||||
*/
|
||||
/* General Typeahead styling, from http://jsfiddle.net/ragulka/Dy9au/1/ */
|
||||
.twitter-typeahead {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
vertical-align: top;
|
||||
}
|
||||
.twitter-typeahead .tt-input,
|
||||
.twitter-typeahead .tt-hint {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
vertical-align: middle;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.twitter-typeahead .tt-hint {
|
||||
color: #999999;
|
||||
z-index: 1;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
.twitter-typeahead .tt-input {
|
||||
color: #555555;
|
||||
z-index: 2;
|
||||
}
|
||||
.twitter-typeahead .tt-input,
|
||||
.twitter-typeahead .tt-hint {
|
||||
height: 34px;
|
||||
padding: 6px 12px;
|
||||
font-size: 14px;
|
||||
line-height: 1.428571429;
|
||||
}
|
||||
.twitter-typeahead .input-sm.tt-input,
|
||||
.twitter-typeahead .hint-sm.tt-hint {
|
||||
border-radius: 3px;
|
||||
}
|
||||
.twitter-typeahead .input-lg.tt-input,
|
||||
.twitter-typeahead .hint-lg.tt-hint {
|
||||
border-radius: 6px;
|
||||
}
|
||||
.input-group .twitter-typeahead:first-child .tt-input,
|
||||
.input-group .twitter-typeahead:first-child .tt-hint {
|
||||
border-radius: 4px 0 0 4px !important;
|
||||
}
|
||||
.input-group .twitter-typeahead:last-child .tt-input,
|
||||
.input-group .twitter-typeahead:last-child .tt-hint {
|
||||
border-radius: 0 4px 4px 0 !important;
|
||||
}
|
||||
.input-group.input-group-sm .twitter-typeahead:first-child .tt-input,
|
||||
.input-group.input-group-sm .twitter-typeahead:first-child .tt-hint {
|
||||
border-radius: 3px 0 0 3px !important;
|
||||
}
|
||||
.input-group.input-group-sm .twitter-typeahead:last-child .tt-input,
|
||||
.input-group.input-group-sm .twitter-typeahead:last-child .tt-hint {
|
||||
border-radius: 0 3px 3px 0 !important;
|
||||
}
|
||||
.input-sm.tt-input,
|
||||
.hint-sm.tt-hint,
|
||||
.input-group.input-group-sm .tt-input,
|
||||
.input-group.input-group-sm .tt-hint {
|
||||
height: 30px;
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.input-group.input-group-lg .twitter-typeahead:first-child .tt-input,
|
||||
.input-group.input-group-lg .twitter-typeahead:first-child .tt-hint {
|
||||
border-radius: 6px 0 0 6px !important;
|
||||
}
|
||||
.input-group.input-group-lg .twitter-typeahead:last-child .tt-input,
|
||||
.input-group.input-group-lg .twitter-typeahead:last-child .tt-hint {
|
||||
border-radius: 0 6px 6px 0 !important;
|
||||
}
|
||||
.input-lg.tt-input,
|
||||
.hint-lg.tt-hint,
|
||||
.input-group.input-group-lg .tt-input,
|
||||
.input-group.input-group-lg .tt-hint {
|
||||
height: 45px;
|
||||
padding: 10px 16px;
|
||||
font-size: 18px;
|
||||
line-height: 1.33;
|
||||
}
|
||||
.tt-dropdown-menu {
|
||||
width: 100%;
|
||||
min-width: 160px;
|
||||
margin-top: 2px;
|
||||
padding: 5px 0;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #ccc;
|
||||
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||
*border-right-width: 2px;
|
||||
*border-bottom-width: 2px;
|
||||
border-radius: 6px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
.tt-suggestion {
|
||||
display: block;
|
||||
padding: 3px 20px;
|
||||
}
|
||||
.tt-suggestion.tt-cursor {
|
||||
color: #262626;
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
}
|
||||
.tt-suggestion.tt-cursor a {
|
||||
color: #ffffff;
|
||||
}
|
||||
.tt-suggestion p {
|
||||
margin: 0;
|
||||
}
|
||||
/* Tokenfield-specific Typeahead styling */
|
||||
.tokenfield .twitter-typeahead {
|
||||
width: auto;
|
||||
}
|
||||
.tokenfield .twitter-typeahead .tt-hint {
|
||||
padding: 0;
|
||||
height: 20px;
|
||||
}
|
||||
.tokenfield.input-sm .twitter-typeahead .tt-input,
|
||||
.tokenfield.input-sm .twitter-typeahead .tt-hint {
|
||||
height: 18px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.tokenfield.input-lg .twitter-typeahead .tt-input,
|
||||
.tokenfield.input-lg .twitter-typeahead .tt-hint {
|
||||
height: 23px;
|
||||
font-size: 18px;
|
||||
line-height: 1.33;
|
||||
}
|
||||
.tokenfield .twitter-typeahead .tt-suggestions {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
/*!
|
||||
* bootstrap-tokenfield
|
||||
* https://github.com/sliptree/bootstrap-tokenfield
|
||||
* Copyright 2013-2014 Sliptree and other contributors; Licensed MIT
|
||||
*/.twitter-typeahead{width:100%;position:relative;vertical-align:top}.twitter-typeahead .tt-input,.twitter-typeahead .tt-hint{margin:0;width:100%;vertical-align:middle;background-color:#fff}.twitter-typeahead .tt-hint{color:#999;z-index:1;border:1px solid transparent}.twitter-typeahead .tt-input{color:#555;z-index:2}.twitter-typeahead .tt-input,.twitter-typeahead .tt-hint{height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429}.twitter-typeahead .input-sm.tt-input,.twitter-typeahead .hint-sm.tt-hint{border-radius:3px}.twitter-typeahead .input-lg.tt-input,.twitter-typeahead .hint-lg.tt-hint{border-radius:6px}.input-group .twitter-typeahead:first-child .tt-input,.input-group .twitter-typeahead:first-child .tt-hint{border-radius:4px 0 0 4px!important}.input-group .twitter-typeahead:last-child .tt-input,.input-group .twitter-typeahead:last-child .tt-hint{border-radius:0 4px 4px 0!important}.input-group.input-group-sm .twitter-typeahead:first-child .tt-input,.input-group.input-group-sm .twitter-typeahead:first-child .tt-hint{border-radius:3px 0 0 3px!important}.input-group.input-group-sm .twitter-typeahead:last-child .tt-input,.input-group.input-group-sm .twitter-typeahead:last-child .tt-hint{border-radius:0 3px 3px 0!important}.input-sm.tt-input,.hint-sm.tt-hint,.input-group.input-group-sm .tt-input,.input-group.input-group-sm .tt-hint{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.input-group.input-group-lg .twitter-typeahead:first-child .tt-input,.input-group.input-group-lg .twitter-typeahead:first-child .tt-hint{border-radius:6px 0 0 6px!important}.input-group.input-group-lg .twitter-typeahead:last-child .tt-input,.input-group.input-group-lg .twitter-typeahead:last-child .tt-hint{border-radius:0 6px 6px 0!important}.input-lg.tt-input,.hint-lg.tt-hint,.input-group.input-group-lg .tt-input,.input-group.input-group-lg .tt-hint{height:45px;padding:10px 16px;font-size:18px;line-height:1.33}.tt-dropdown-menu{width:100%;min-width:160px;margin-top:2px;padding:5px 0;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);*border-right-width:2px;*border-bottom-width:2px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tt-suggestion{display:block;padding:3px 20px}.tt-suggestion.tt-cursor{color:#262626;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.tt-suggestion.tt-cursor a{color:#fff}.tt-suggestion p{margin:0}.tokenfield .twitter-typeahead{width:auto}.tokenfield .twitter-typeahead .tt-hint{padding:0;height:20px}.tokenfield.input-sm .twitter-typeahead .tt-input,.tokenfield.input-sm .twitter-typeahead .tt-hint{height:18px;font-size:12px;line-height:1.5}.tokenfield.input-lg .twitter-typeahead .tt-input,.tokenfield.input-lg .twitter-typeahead .tt-hint{height:23px;font-size:18px;line-height:1.33}.tokenfield .twitter-typeahead .tt-suggestions{font-size:14px}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
jQuery.fn.nfAdminModal = function( action, options ) {
|
||||
|
||||
if ( 0 == jQuery( '#nf-admin-modal-backdrop' ).length ) {
|
||||
var modalHtml = '<div id="nf-admin-modal-backdrop" style="display: none;"></div><div id="nf-admin-modal-wrap" class="wp-core-ui" style="display: none;"><div id="nf-admin-modal" tabindex="-1"><div id="admin-modal-title"><span id="nf-modal-title"></span><button type="button" id="nf-admin-modal-close" class="modal-close"><span class="screen-reader-text modal-close">Close</span></button></div><div id="modal-contents-wrapper" style="padding:20px;"><div id="nf-admin-modal-content" class="admin-modal-inside"></div><div class="submitbox" style="display:block;"></div></div></div></div>';
|
||||
jQuery( 'body' ).append( modalHtml );
|
||||
}
|
||||
|
||||
if ( 'object' === typeof action ) {
|
||||
options = action;
|
||||
}
|
||||
|
||||
var defaults = { 'title' : '', 'buttons' : false, 'backgroundClose': false };
|
||||
|
||||
if ( 'undefined' === typeof options ) {
|
||||
options = jQuery( this ).data( 'nfAdminModal' );
|
||||
if ( 'undefined' === typeof options ) {
|
||||
// Merge our default options with the options sent
|
||||
options = jQuery.extend( defaults, options );
|
||||
}
|
||||
} else {
|
||||
// Merge our default options with the options sent
|
||||
options = jQuery.extend( defaults, options );
|
||||
}
|
||||
|
||||
// Set our data with the current options
|
||||
jQuery( this ).data( 'nfAdminModal', options );
|
||||
|
||||
jQuery( this ).hide();
|
||||
jQuery( '#nf-admin-modal-content' ).html( this.html() );
|
||||
|
||||
jQuery( '#nf-modal-title' ).html( options.title );
|
||||
|
||||
if ( options.buttons ) {
|
||||
jQuery( options.buttons ).hide();
|
||||
var buttons = jQuery( options.buttons ).html();
|
||||
jQuery( '#modal-contents-wrapper' ).find( '.submitbox' ).html( buttons );
|
||||
jQuery( '#nf-admin-modal-content' ).addClass( 'admin-modal-inside' );
|
||||
jQuery( '#modal-contents-wrapper' ).find( '.submitbox' ).show();
|
||||
} else {
|
||||
jQuery( '#nf-admin-modal-content' ).removeClass( 'admin-modal-inside' );
|
||||
jQuery( '#modal-contents-wrapper' ).find( '.submitbox' ).hide();
|
||||
}
|
||||
|
||||
jQuery( '#nf-admin-modal-backdrop' ).data( 'backgroundClose', options.backgroundClose );
|
||||
|
||||
if ( 'close' == action ) {
|
||||
jQuery.fn.nfAdminModal.close();
|
||||
} else if ( 'open' == action ) {
|
||||
jQuery.fn.nfAdminModal.open();
|
||||
}
|
||||
};
|
||||
|
||||
jQuery( document ).on( 'click', '#nf-admin-modal-backdrop', function( e ) {
|
||||
if ( jQuery( this ).data( 'backgroundClose' ) == true ) {
|
||||
jQuery.fn.nfAdminModal.close();
|
||||
}
|
||||
} );
|
||||
|
||||
jQuery( document ).on( 'click', '.modal-close', function( e ) {
|
||||
e.preventDefault();
|
||||
jQuery.fn.nfAdminModal.close();
|
||||
} );
|
||||
|
||||
jQuery.fn.nfAdminModal.close = function() {
|
||||
jQuery( '#nf-admin-modal-backdrop' ).hide();
|
||||
jQuery( '#nf-admin-modal-wrap' ).hide();
|
||||
jQuery( document ).triggerHandler( 'nfAdminModalClose' );
|
||||
}
|
||||
|
||||
jQuery.fn.nfAdminModal.open = function() {
|
||||
jQuery( '#nf-admin-modal-backdrop' ).show();
|
||||
jQuery( '#nf-admin-modal-wrap' ).show();
|
||||
jQuery( document ).triggerHandler( 'nfAdminModalOpen' );
|
||||
}
|
||||
|
|
@ -1,519 +0,0 @@
|
|||
/**
|
||||
* JS that handles our fields in the admin.
|
||||
* Uses backbone data models to send only modified field data to the db.
|
||||
*/
|
||||
|
||||
// Model to hold our field settings.
|
||||
var nfField = Backbone.Model.extend( {
|
||||
toggleMetabox: function() {
|
||||
/**
|
||||
* Open and close a field metabox.
|
||||
* When a metabox is closed:
|
||||
* - update the field collection with any values that might have changed.
|
||||
* - remove the HTML
|
||||
* When a metabox is opened:
|
||||
* - send an ajax request to grab the HTML
|
||||
* - populate the field settings HTML
|
||||
*/
|
||||
|
||||
var field_id = this.id;
|
||||
|
||||
// Get our current metabox state.
|
||||
var current_metabox_state = this.get( 'metabox_state' );
|
||||
if ( current_metabox_state == 1 ) { // If our current state is 1, then we are closing the metabox.
|
||||
var new_metabox_state = 0;
|
||||
} else { // If our current state is 0, then we are opening the metabox.
|
||||
var new_metabox_state = 1;
|
||||
}
|
||||
|
||||
// Perform specific tasks based upon the state of the metabox.
|
||||
if ( new_metabox_state == 1 ) { // If we have opened the metabox.
|
||||
// Fetch our HTML.
|
||||
this.updateHTML();
|
||||
} else { // If we have closed the metabox.
|
||||
// Update our model data.
|
||||
this.updateData();
|
||||
// Remove any tinyMCE editors
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).find( 'div.rte' ).each( function() {
|
||||
if ( 'undefined' != typeof tinymce ) {
|
||||
try {
|
||||
var editor_id = jQuery( this ).find( 'textarea.wp-editor-area' ).prop( 'id' );
|
||||
tinymce.remove( '#' + editor_id );
|
||||
} catch (e ) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).slideUp('fast', function( e ) {
|
||||
// Remove the HTML contents of this metabox.
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).empty();
|
||||
|
||||
// Add our no-padding class
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).addClass( 'no-padding' );
|
||||
});
|
||||
}
|
||||
|
||||
// Save the state of the metabox in our data model.
|
||||
this.set( 'metabox_state', new_metabox_state );
|
||||
},
|
||||
updateHTML: function() {
|
||||
var field_id = this.id;
|
||||
jQuery( '#ninja_forms_metabox_field_' + field_id ).find( '.spinner' ).show();
|
||||
jQuery( '#ninja_forms_metabox_field_' + field_id ).find( '.spinner' ).css( 'visibility', 'visible' );
|
||||
this.updateData();
|
||||
var data = JSON.stringify( this.toJSON() );
|
||||
var that = this;
|
||||
jQuery.post( ajaxurl, { field_id: field_id, data: data, action:'nf_output_field_settings_html', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function( response ) {
|
||||
jQuery( '#ninja_forms_metabox_field_' + field_id ).find( '.spinner' ).hide();
|
||||
// Remove our no-padding class.
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).removeClass( 'no-padding' );
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).append( response );
|
||||
if ( typeof nf_ajax_rte_editors !== 'undefined' && 'undefined' !== typeof tinyMCE ) {
|
||||
for (var x = nf_ajax_rte_editors.length - 1; x >= 0; x--) {
|
||||
try {
|
||||
var editor_id = nf_ajax_rte_editors[x];
|
||||
tinyMCE.init( tinyMCEPreInit.mceInit[ editor_id ] );
|
||||
try { quicktags( tinyMCEPreInit.qtInit[ editor_id ] ); } catch(e){ console.log( 'error' ); }
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
that.removeEmptySettings();
|
||||
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).slideDown( 'fast' );
|
||||
|
||||
// Re-run makeSortable for new HTML
|
||||
nfFields.listOptionsSortable();
|
||||
|
||||
jQuery( '.nf-field-settings .title' ).disableSelection();
|
||||
} );
|
||||
},
|
||||
updateData: function() {
|
||||
var field_id = this.id;
|
||||
if ( 'undefined' != typeof tinyMCE ) {
|
||||
try {
|
||||
tinyMCE.triggerSave();
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var data = jQuery('[name^=ninja_forms_field_' + field_id + ']');
|
||||
var field_data = jQuery(data).serializeFullArray();
|
||||
|
||||
if ( typeof field_data['ninja_forms_field_' + field_id] != 'undefined' ) {
|
||||
var field = field_data['ninja_forms_field_' + field_id];
|
||||
|
||||
for( var prop in field ) {
|
||||
if ( field.hasOwnProperty( prop ) ) {
|
||||
nfFields.get( field_id ).set( prop, field[ prop ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
nfForm.set( 'saved', false );
|
||||
},
|
||||
remove: function() {
|
||||
var field_id = this.id;
|
||||
var answer = confirm( nf_admin.remove_field );
|
||||
if ( answer ) {
|
||||
var form_id = ninja_forms_settings.form_id
|
||||
jQuery.post(ajaxurl, { form_id: form_id, field_id: field_id, action: 'ninja_forms_remove_field', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function( response ) {
|
||||
jQuery( '#ninja_forms_field_' + field_id).remove();
|
||||
jQuery( document ).trigger( 'removeField', [ field_id ] );
|
||||
});
|
||||
}
|
||||
},
|
||||
removeEmptySettings: function() {
|
||||
var field_id = this.id;
|
||||
jQuery( '#ninja_forms_field_' + field_id + '_inside' ).find( '.nf-field-settings .inside' ).each( function() {
|
||||
var html = jQuery.trim( jQuery( this ).html() );
|
||||
if ( html == '' ) {
|
||||
jQuery( this ).parent().remove();
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
} );
|
||||
// Collection to hold our fields.
|
||||
var nfFields = Backbone.Collection.extend({
|
||||
model: nfField,
|
||||
setup: function() {
|
||||
// Loop through our field JSON that is already on the page and populate our collection with it.
|
||||
if( 'undefined' !== typeof nf_admin.fields ) {
|
||||
_.each( nf_admin.fields, function( field ) {
|
||||
nfFields.add( { id: field.id, metabox_state: field.metabox_state } );
|
||||
} );
|
||||
}
|
||||
},
|
||||
updateData: function() {
|
||||
// Loop through our fields collection and update any field lis that are open
|
||||
_.each( this.models, function( field ) {
|
||||
if ( field.get( 'metabox_state' ) == 1 ) {
|
||||
field.updateData();
|
||||
}
|
||||
} );
|
||||
},
|
||||
newField: function( button ) {
|
||||
var limit = jQuery( button ).data( 'limit' );
|
||||
var type = jQuery( button ).data( 'type' );
|
||||
var form_id = ninja_forms_settings.form_id
|
||||
|
||||
if ( limit != '' ){
|
||||
var current_count = jQuery( '.' + type + '-li' ).length;
|
||||
}else{
|
||||
var current_count = '';
|
||||
}
|
||||
|
||||
if ( typeof jQuery( button ).data( 'field' ) == 'undefined' ) {
|
||||
var field_id = '';
|
||||
var action = 'ninja_forms_new_field';
|
||||
} else if ( jQuery( button ).data( 'type' ) == 'fav' ) {
|
||||
var field_id = jQuery( button ).data( 'field' );
|
||||
var action = 'ninja_forms_insert_fav';
|
||||
} else {
|
||||
var field_id = jQuery( button ).data( 'field' );
|
||||
var action = 'ninja_forms_insert_def';
|
||||
}
|
||||
|
||||
if ( ( limit != '' && current_count < limit ) || limit == '' || current_count == '' || current_count == 0 ) {
|
||||
jQuery.post( ajaxurl, { type: type, field_id: field_id, form_id: form_id, action: action, nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, this.newFieldResponse );
|
||||
} else {
|
||||
jQuery( button ).addClass( 'disabled' );
|
||||
}
|
||||
nfForm.set( 'saved', false );
|
||||
},
|
||||
newFieldResponse: function( response ) {
|
||||
// Fire our custom jQuery addField event.
|
||||
jQuery( document ).trigger('addField', [ response ]);
|
||||
},
|
||||
addFieldDefault: function( response ) {
|
||||
jQuery( '#ninja_forms_field_list' ).append( response.new_html ).show( 'slow' );
|
||||
|
||||
if ( response.new_type == 'List' ) {
|
||||
this.listOptionsSortable();
|
||||
}
|
||||
if ( typeof nf_ajax_rte_editors !== 'undefined' && 'undefined' !== typeof tinyMCE ) {
|
||||
for (var x = nf_ajax_rte_editors.length - 1; x >= 0; x--) {
|
||||
try {
|
||||
var editor_id = nf_ajax_rte_editors[x];
|
||||
tinyMCE.init( tinyMCEPreInit.mceInit[ editor_id ] );
|
||||
try { quicktags( tinyMCEPreInit.qtInit[ editor_id ] ); } catch(e){}
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
// Add our field to our backbone data model.
|
||||
this.add( { id: response.new_id, metabox_state: 1 } );
|
||||
|
||||
nfFields.get( response.new_id ).removeEmptySettings();
|
||||
},
|
||||
listOptionsSortable: function ( response ) {
|
||||
//Make List Options sortable
|
||||
jQuery(".ninja-forms-field-list-options").sortable({
|
||||
helper: 'clone',
|
||||
handle: '.ninja-forms-drag',
|
||||
items: 'div',
|
||||
placeholder: 'ui-state-highlight',
|
||||
update: function( event, ui ) {
|
||||
var order = jQuery( this ).sortable( 'toArray' );
|
||||
var x = 0;
|
||||
_.each( order, function( id ) {
|
||||
var field_id = jQuery( '#' + id ).data( 'field' );
|
||||
|
||||
var label_name = 'ninja_forms_field_' + field_id + '[list][options][' + x + '][label]';
|
||||
var value_name = 'ninja_forms_field_' + field_id + '[list][options][' + x + '][value]';
|
||||
var calc_name = 'ninja_forms_field_' + field_id + '[list][options][' + x + '][calc]';
|
||||
var selected_name = 'ninja_forms_field_' + field_id + '[list][options][' + x + '][selected]';
|
||||
|
||||
jQuery( '#' + id ).find( '.ninja-forms-field-list-option-label' ).attr( 'name', label_name );
|
||||
jQuery( '#' + id ).find( '.ninja-forms-field-list-option-value' ).attr( 'name', value_name );
|
||||
jQuery( '#' + id ).find( '.ninja-forms-field-list-option-calc' ).attr( 'name', calc_name );
|
||||
jQuery( '#' + id ).find( '.ninja-forms-field-list-option-selected' ).attr( 'name', selected_name );
|
||||
|
||||
x++;
|
||||
} );
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
var nfForm = Backbone.Model.extend( {
|
||||
defaults: {
|
||||
'id' : ninja_forms_settings.form_id,
|
||||
'status' : nf_admin.form_status,
|
||||
'title' : nf_admin.form_title,
|
||||
'saved' : true
|
||||
},
|
||||
setup: function() {
|
||||
this.changeMenu();
|
||||
},
|
||||
changeMenu: function() {
|
||||
|
||||
if ( 'new' == this.get( 'status' ) ) { // If we're working with a new form, highlight the "Add New" menu item.
|
||||
jQuery( '.wp-submenu li' ).removeClass( 'current' );
|
||||
jQuery( 'a[href="admin.php?page=ninja-forms&tab=builder&form_id=new"]' ).parent().addClass( 'current' );
|
||||
} else {
|
||||
var html = '<li class="current"><a href="#">' + nf_admin.edit_form_text + '</a></li>';
|
||||
if ( jQuery( 'li a:contains("' + nf_admin.edit_form_text + '")' ).length == 0 ) {
|
||||
jQuery( '.wp-submenu li' ).removeClass( 'current' );
|
||||
jQuery( 'a[href="admin.php?page=ninja-forms&tab=builder&form_id=new"]' ).parent().after( html );
|
||||
}
|
||||
}
|
||||
},
|
||||
save: function() {
|
||||
jQuery( '.nf-save-admin-fields' ).hide();
|
||||
jQuery( '.nf-save-spinner' ).show();
|
||||
jQuery( '.nf-save-spinner' ).css( 'visibility', 'visible' );
|
||||
|
||||
// If our form is new, then prompt for a title before we save
|
||||
if ( 'new' == this.get( 'status' ) ) {
|
||||
if ( jQuery( '._submit-li' ).length > 0 ) {
|
||||
jQuery( '#nf-insert-submit-div' ).hide();
|
||||
this.set( 'show_insert_submit', false );
|
||||
} else {
|
||||
jQuery( '#nf-insert-submit-div' ).show();
|
||||
this.set( 'show_insert_submit', true );
|
||||
}
|
||||
// Open our save form modal.
|
||||
jQuery( '#nf-save-title' ).nfAdminModal( 'open' );
|
||||
jQuery( '#modal-contents-wrapper' ).find( '#nf-form-title' ).focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
nfFields.updateData();
|
||||
|
||||
var field_data = JSON.stringify( nfFields.toJSON() );
|
||||
var field_order = {};
|
||||
var current_order = jQuery( '#ninja_forms_field_list' ).sortable( 'toArray' );
|
||||
|
||||
for ( var i = 0; i < current_order.length; i++ ) {
|
||||
field_order[i] = current_order[i];
|
||||
};
|
||||
field_order = JSON.stringify( field_order );
|
||||
var form_id = ninja_forms_settings.form_id;
|
||||
|
||||
jQuery( document ).data( 'field_order', field_order );
|
||||
jQuery( document ).data( 'field_data', field_data );
|
||||
|
||||
jQuery( document ).triggerHandler( 'nfAdminSaveFields' );
|
||||
|
||||
var field_order = jQuery( document ).data( 'field_order' );
|
||||
var data = jQuery( document ).data( 'field_data' );
|
||||
|
||||
jQuery.post( ajaxurl, { form_title: this.get( 'title' ), form_id: form_id, field_data: field_data, field_order: field_order, action: 'nf_admin_save_builder', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function( response ) {
|
||||
jQuery( '.nf-save-spinner' ).hide();
|
||||
jQuery( '.nf-save-admin-fields' ).show();
|
||||
var html = '<div id="message" class="updated below-h2" style="display:none;margin-top: 20px;"><p>' + nf_admin.saved_text + '</p></div>';
|
||||
jQuery( '.nav-tab-wrapper:last' ).after( html );
|
||||
jQuery( '#message' ).fadeIn();
|
||||
if ( jQuery( '#nf-display-form-title' ).html() == '' ) {
|
||||
jQuery( '#nf-display-form-title' ).html( nfForm.get( 'title' ) );
|
||||
}
|
||||
nfForm.set( 'saved', true );
|
||||
nfForm.set( 'status', '' );
|
||||
nfForm.changeMenu();
|
||||
} );
|
||||
},
|
||||
saveTitle: function() {
|
||||
var title = jQuery( '#modal-contents-wrapper' ).find( '#nf-form-title' ).val();
|
||||
var show_insert_submit = this.get( 'show_insert_submit' );
|
||||
var insert_submit = jQuery( '#modal-contents-wrapper' ).find( '#nf-insert-submit' ).prop( 'checked' );
|
||||
this.set( 'title', title );
|
||||
this.set( 'status', '' );
|
||||
|
||||
// Insert our submit button if we checked the box.
|
||||
if ( show_insert_submit && insert_submit ) {
|
||||
var that = this;
|
||||
// Add our custom addField behaviour
|
||||
jQuery( document ).on( 'addField.insertSubmit', function( e, response ) {
|
||||
jQuery( '#ninja_forms_field_' + response.new_id + '_toggle' ).click();
|
||||
jQuery( '#nf-save-title' ).nfAdminModal( 'close' );
|
||||
that.save();
|
||||
jQuery( document ).off( 'addField.insertSubmit' );
|
||||
} );
|
||||
jQuery( '#_submit' ).click();
|
||||
} else {
|
||||
jQuery( '#nf-save-title' ).nfAdminModal( 'close' );
|
||||
this.save();
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
// Instantiate our fields collection.
|
||||
var nfFields = new nfFields();
|
||||
|
||||
// Instantiate our form settings.
|
||||
var nfForm = new nfForm();
|
||||
|
||||
(function($){
|
||||
|
||||
$( document ).ready( function( $ ) {
|
||||
|
||||
nfFields.setup();
|
||||
nfForm.setup();
|
||||
|
||||
// Open and close a field metabox.
|
||||
$( document ).on( 'click', '.nf-edit-field', function( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
// Get our field id.
|
||||
var field_id = jQuery( e.target ).data( 'field' );
|
||||
nfFields.get( field_id ).toggleMetabox();
|
||||
|
||||
// Get our current metabox state.
|
||||
var current_metabox_state = nfFields.get( field_id ).get( 'metabox_state' );
|
||||
if ( current_metabox_state == 1 ) {
|
||||
$( this ).addClass( 'open' );
|
||||
} else {
|
||||
$( this ).removeClass( 'open' );
|
||||
}
|
||||
});
|
||||
|
||||
// Remove the saved message when the user clicks anywhere on the page.
|
||||
$( document ).on( 'click', function() {
|
||||
$( '#message' ).fadeOut( 'slow' );
|
||||
} );
|
||||
|
||||
$( document ).on( 'click', '.nf-save-admin-fields', function( e ) {
|
||||
e.preventDefault();
|
||||
nfForm.save();
|
||||
} );
|
||||
|
||||
$( document ).on( 'click', '#nf-save-title-submit', function( e ) {
|
||||
e.preventDefault();
|
||||
nfForm.saveTitle();
|
||||
} );
|
||||
|
||||
// Add New Field
|
||||
$( document ).on( 'click', '.ninja-forms-new-field', function( e ) {
|
||||
e.preventDefault();
|
||||
nfFields.newField( e.target );
|
||||
} );
|
||||
|
||||
// Remove Field
|
||||
$( document ).on( 'click', '.nf-remove-field', function( e ){
|
||||
e.preventDefault();
|
||||
var field_id = jQuery( e.target ).data( 'field' );
|
||||
nfFields.get( field_id ).remove();
|
||||
});
|
||||
|
||||
// Hook into our add field response event
|
||||
$( document ).on( 'addField.default', function( e, response ) {
|
||||
nfFields.addFieldDefault( response );
|
||||
} );
|
||||
|
||||
// Insert a Favorite Field
|
||||
$( document ).on( 'click', '.ninja-forms-insert-fav-field', function( e ){
|
||||
e.preventDefault();
|
||||
nfFields.newField( e.target );
|
||||
});
|
||||
|
||||
// Insert a Defined Field
|
||||
$( document ).on( 'click', '.ninja-forms-insert-def-field', function( e ){
|
||||
e .preventDefault();
|
||||
nfFields.newField( e.target );
|
||||
});
|
||||
|
||||
// Create our save form modal.
|
||||
$( '#nf-save-title' ).nfAdminModal( { title: 'Save Your Form', buttons: '#nf-save-title-buttons' } );
|
||||
|
||||
// Remove spinners when the save title modal is closed
|
||||
$( document ).on( 'nfAdminModalClose.hideSpinners', function( e ) {
|
||||
jQuery( '.nf-save-spinner' ).hide();
|
||||
jQuery( '.nf-save-admin-fields' ).show();
|
||||
} );
|
||||
|
||||
// Enable/disable our save button on the name modal
|
||||
$( document ).on( 'keyup', '#nf-form-title', function( e ) {
|
||||
var value = this.value;
|
||||
if ( this.value.length > 0 ) {
|
||||
$( '#modal-contents-wrapper' ).find( '#nf-save-title-submit' ).prop( 'disabled', false );
|
||||
$( '#modal-contents-wrapper' ).find( '#nf-save-title-submit' ).removeClass( 'button-secondary' );
|
||||
$( '#modal-contents-wrapper' ).find( '#nf-save-title-submit' ).addClass( 'button-primary' );
|
||||
} else {
|
||||
$( '#modal-contents-wrapper' ).find( '#nf-save-title-submit' ).prop( 'disabled', true );
|
||||
$( '#modal-contents-wrapper' ).find( '#nf-save-title-submit' ).removeClass( 'button-primary' );
|
||||
$( '#modal-contents-wrapper' ).find( '#nf-save-title-submit' ).addClass( 'button-secondary' );
|
||||
}
|
||||
|
||||
if( e.keyCode == 13 && this.value.length > 0 ){
|
||||
nfForm.saveTitle();
|
||||
}
|
||||
} );
|
||||
|
||||
// Make the field list sortable
|
||||
$( '.ninja-forms-field-list' ).sortable({
|
||||
handle: '.menu-item-handle',
|
||||
items: 'li:not(.not-sortable)',
|
||||
connectWith: '.ninja-forms-field-list',
|
||||
//cursorAt: {left: -10, top: -1},
|
||||
start: function( e, ui ) {
|
||||
var wp_editor_count = $( ui.item ).find( '.wp-editor-wrap' ).length;
|
||||
if(wp_editor_count > 0){
|
||||
$(ui.item).find('.wp-editor-wrap').each(function(){
|
||||
try {
|
||||
var ed_id = this.id.replace( 'wp- ', '');
|
||||
ed_id = ed_id.replace( '-wrap', '' );
|
||||
tinyMCE.execCommand( 'mceRemoveControl', false, ed_id );
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
stop: function( e,ui ) {
|
||||
var wp_editor_count = $( ui.item ).find( '.wp-editor-wrap' ).length;
|
||||
if( wp_editor_count > 0 ) {
|
||||
$( ui.item ).find( '.wp-editor-wrap').each(function(){
|
||||
try {
|
||||
var ed_id = this.id.replace( 'wp-', '' );
|
||||
ed_id = ed_id.replace( '-wrap', '' );
|
||||
tinyMCE.execCommand( 'mceAddControl', true, ed_id );
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
$( this ).sortable( 'refresh' );
|
||||
nfForm.set( 'saved', false );
|
||||
}
|
||||
});
|
||||
|
||||
$( document ).on( 'dblclick', '.nf-field-settings .title', function(e) {
|
||||
$( this ).find( '.nf-field-sub-section-toggle' ).click();
|
||||
} );
|
||||
|
||||
$( document ).on( 'click', '.nf-field-sub-section-toggle', function(e) {
|
||||
e.preventDefault();
|
||||
if ( $( this ).hasClass( 'dashicons-arrow-right' ) ) {
|
||||
$( this ).removeClass( 'dashicons-arrow-right' ).addClass( 'dashicons-arrow-up' );
|
||||
} else {
|
||||
$( this ).removeClass( 'dashicons-arrow-up' ).addClass( 'dashicons-arrow-right' );
|
||||
}
|
||||
$( this ).parent().next( '.inside' ).slideToggle();
|
||||
} );
|
||||
|
||||
$( window ).bind( 'beforeunload', function() {
|
||||
if ( 'new' == nfForm.get( 'status' ) ) { // Prompt the user to give a name if they leave the builder before naming their form.
|
||||
$( '#nf-save-title' ).nfAdminModal( 'open' );
|
||||
return 'Please save your form before leaving this page.';
|
||||
} else if ( nfForm.get( 'saved' ) == false ) {
|
||||
return 'You have unsaved changes. Please save before leaving this page.';
|
||||
}
|
||||
} );
|
||||
|
||||
$( document ).on( 'dblclick', '.menu-item-handle', function( e ) {
|
||||
$( this ).find( '.nf-edit-field' ).click();
|
||||
} );
|
||||
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
|
|
@ -1,281 +0,0 @@
|
|||
/*!
|
||||
* Copyright Ben Olson (https://github.com/bseth99/jquery-ui-extensions)
|
||||
* jQuery UI ComboBox @VERSION
|
||||
*
|
||||
* Adapted from Jörn Zaefferer original implementation at
|
||||
* http://www.learningjquery.com/2010/06/a-jquery-ui-combobox-under-the-hood
|
||||
*
|
||||
* And the demo at
|
||||
* http://jqueryui.com/autocomplete/#combobox
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
(function( $, undefined ) {
|
||||
|
||||
$.widget( "ui.combobox", {
|
||||
|
||||
version: "@VERSION",
|
||||
|
||||
widgetEventPrefix: "combobox",
|
||||
|
||||
uiCombo: null,
|
||||
uiInput: null,
|
||||
_wasOpen: false,
|
||||
|
||||
_create: function() {
|
||||
|
||||
var self = this,
|
||||
select = this.element.hide(),
|
||||
input, wrapper;
|
||||
|
||||
input = this.uiInput =
|
||||
$( "<input />" )
|
||||
.insertAfter(select)
|
||||
.addClass("ui-widget ui-widget-content ui-corner-left ui-combobox-input")
|
||||
.val( select.children(':selected').text() )
|
||||
.attr('tabindex', select.attr( 'tabindex'));
|
||||
|
||||
wrapper = this.uiCombo =
|
||||
input.wrap( '<span>' )
|
||||
.parent()
|
||||
.addClass( 'ui-combobox' )
|
||||
.insertAfter( select );
|
||||
|
||||
input
|
||||
.autocomplete({
|
||||
|
||||
delay: 0,
|
||||
minLength: 0,
|
||||
|
||||
appendTo: wrapper,
|
||||
source: $.proxy( this, "_linkSelectList" )
|
||||
|
||||
});
|
||||
|
||||
$( "<button>" )
|
||||
.attr( "tabIndex", -1 )
|
||||
.attr( "type", "button" )
|
||||
.insertAfter( input )
|
||||
.button({
|
||||
icons: {
|
||||
primary: "ui-icon-triangle-1-s"
|
||||
},
|
||||
text: false
|
||||
})
|
||||
.removeClass( "ui-corner-all" )
|
||||
.addClass( "ui-corner-right ui-button-icon ui-combobox-button" );
|
||||
|
||||
|
||||
// Our items have HTML tags. The default rendering uses text()
|
||||
// to set the content of the <a> tag. We need html().
|
||||
input.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
|
||||
|
||||
return $( "<li>" )
|
||||
.append( $( "<a>" ).html( item.label ) )
|
||||
.appendTo( ul );
|
||||
|
||||
};
|
||||
|
||||
this._on( this._events );
|
||||
|
||||
},
|
||||
|
||||
|
||||
_linkSelectList: function( request, response ) {
|
||||
|
||||
var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), 'i' );
|
||||
response( this.element.children('option').map(function() {
|
||||
var text = $( this ).text();
|
||||
|
||||
if ( this.value && ( !request.term || matcher.test(text) ) ) {
|
||||
var optionData = {
|
||||
label: text,
|
||||
value: text,
|
||||
option: this
|
||||
};
|
||||
if (request.term) {
|
||||
optionData.label = text.replace(
|
||||
new RegExp(
|
||||
"(?![^&;]+;)(?!<[^<>]*)(" +
|
||||
$.ui.autocomplete.escapeRegex(request.term) +
|
||||
")(?![^<>]*>)(?![^&;]+;)", "gi"),
|
||||
"<strong>$1</strong>");
|
||||
}
|
||||
return optionData;
|
||||
}
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
_events: {
|
||||
|
||||
"autocompletechange input" : function(event, ui) {
|
||||
|
||||
var $el = $(event.currentTarget);
|
||||
var changedOption = ui.item ? ui.item.option : null;
|
||||
if ( !ui.item ) {
|
||||
|
||||
var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $el.val() ) + "$", "i" ),
|
||||
valid = false,
|
||||
matchContains = null,
|
||||
iContains = 0,
|
||||
iSelectCtr = -1,
|
||||
iSelected = -1,
|
||||
optContains = null;
|
||||
if (this.options.autofillsinglematch) {
|
||||
matchContains = new RegExp($.ui.autocomplete.escapeRegex($el.val()), "i");
|
||||
}
|
||||
|
||||
|
||||
this.element.children( "option" ).each(function() {
|
||||
var t = $(this).text();
|
||||
if ( t.match( matcher ) ) {
|
||||
this.selected = valid = true;
|
||||
return false;
|
||||
}
|
||||
if (matchContains) {
|
||||
// look for items containing the value
|
||||
iSelectCtr++;
|
||||
if (t.match(matchContains)) {
|
||||
iContains++;
|
||||
optContains = $(this);
|
||||
iSelected = iSelectCtr;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if ( !valid ) {
|
||||
// autofill option: if there is just one match, then select the matched option
|
||||
if (iContains == 1) {
|
||||
changedOption = optContains[0];
|
||||
changedOption.selected = true;
|
||||
var t2 = optContains.text();
|
||||
$el.val(t2);
|
||||
$el.data('ui-autocomplete').term = t2;
|
||||
this.element.prop('selectedIndex', iSelected);
|
||||
console.log("Found single match with '" + t2 + "'");
|
||||
} else {
|
||||
|
||||
// remove invalid value, as it didn't match anything
|
||||
$el.val( '' );
|
||||
|
||||
// Internally, term must change before another search is performed
|
||||
// if the same search is performed again, the menu won't be shown
|
||||
// because the value didn't actually change via a keyboard event
|
||||
$el.data( 'ui-autocomplete' ).term = '';
|
||||
|
||||
this.element.prop('selectedIndex', -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._trigger( "change", event, {
|
||||
item: changedOption
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
"autocompleteselect input": function( event, ui ) {
|
||||
|
||||
ui.item.option.selected = true;
|
||||
this._trigger( "select", event, {
|
||||
item: ui.item.option
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
"autocompleteopen input": function ( event, ui ) {
|
||||
|
||||
this.uiCombo.children('.ui-autocomplete')
|
||||
.outerWidth(this.uiCombo.outerWidth(true));
|
||||
},
|
||||
|
||||
"mousedown .ui-combobox-button" : function ( event ) {
|
||||
this._wasOpen = this.uiInput.autocomplete("widget").is(":visible");
|
||||
},
|
||||
|
||||
"click .ui-combobox-button" : function( event ) {
|
||||
|
||||
this.uiInput.focus();
|
||||
|
||||
// close if already visible
|
||||
if (this._wasOpen)
|
||||
return;
|
||||
|
||||
// pass empty string as value to search for, displaying all results
|
||||
this.uiInput.autocomplete("search", "");
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
value: function ( newVal ) {
|
||||
var select = this.element,
|
||||
valid = false,
|
||||
selected;
|
||||
|
||||
if ( !arguments.length ) {
|
||||
selected = select.children( ":selected" );
|
||||
return selected.length > 0 ? selected.val() : null;
|
||||
}
|
||||
|
||||
select.prop('selectedIndex', -1);
|
||||
select.children('option').each(function() {
|
||||
if ( this.value == newVal ) {
|
||||
this.selected = valid = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if ( valid ) {
|
||||
this.uiInput.val(select.children(':selected').text());
|
||||
} else {
|
||||
this.uiInput.val( "" );
|
||||
this.element.prop('selectedIndex', -1);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_destroy: function () {
|
||||
this.element.show();
|
||||
this.uiCombo.replaceWith( this.element );
|
||||
},
|
||||
|
||||
widget: function () {
|
||||
return this.uiCombo;
|
||||
},
|
||||
|
||||
_getCreateEventData: function() {
|
||||
|
||||
return {
|
||||
select: this.element,
|
||||
combo: this.uiCombo,
|
||||
input: this.uiInput
|
||||
};
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
}(jQuery));
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1,177 +0,0 @@
|
|||
jQuery(document).ready(function($) {
|
||||
|
||||
$( '.nf-upgrade-complete' ).nfAdminModal( { title: nfUpgradeHandler.nf_upgrade_complete_title, buttons: '.nf-upgrade-complete-buttons' } );
|
||||
|
||||
function UpgradeHandler( upgrade ) {
|
||||
|
||||
this.upgrade = upgrade;
|
||||
|
||||
this.process = function( step, total_steps, args ) {
|
||||
|
||||
step = typeof step !== 'undefined' ? step : 0;
|
||||
total_step = typeof total_step !== 'undefined' ? total_step : 0;
|
||||
args = typeof args !== 'undefined' ? args : [];
|
||||
|
||||
console.log( 'Upgrade: ' + this.upgrade );
|
||||
|
||||
$.post(
|
||||
ajaxurl,
|
||||
{
|
||||
upgrade: this.upgrade,
|
||||
step: parseInt( step ),
|
||||
total_steps: parseInt( total_steps ),
|
||||
args: args,
|
||||
action: 'nf_upgrade_handler'
|
||||
},
|
||||
function (response) {
|
||||
|
||||
var elem = $( '#nf_upgrade_' + upgradeHandler.upgrade );
|
||||
|
||||
try {
|
||||
response = $.parseJSON(response);
|
||||
} catch( e ) {
|
||||
|
||||
// TODO: move error display to Upgrade object
|
||||
|
||||
elem.find( '.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' );
|
||||
|
||||
elem.find( '.dashicons-no' ).css( 'display', 'block' );
|
||||
|
||||
elem.find( '.nf-upgrade-handler__errors__text').html('Bad Response :\'(<br/>' + e + "<br />" + response );
|
||||
elem.find( '.nf-upgrade-handler__errors').slideDown();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.log( 'DEBUG: NF_UpgradeHandler step response: ');
|
||||
console.log( response );
|
||||
|
||||
if( undefined == response ) {
|
||||
|
||||
// TODO: move error display to Upgrade object
|
||||
|
||||
elem.find( '.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' );
|
||||
|
||||
elem.find( '.dashicons-no' ).css( 'display', 'block' );
|
||||
|
||||
elem.find( '.nf-upgrade-handler__errors__text').html('Empty Response :\'(');
|
||||
elem.find( '.nf-upgrade-handler__errors').slideDown();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if( response.errors ) {
|
||||
// TODO: move error display to Upgrade object
|
||||
elem.find( '.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' );
|
||||
|
||||
elem.find( '.dashicons-no' ).css( 'display', 'block' );
|
||||
|
||||
var error_text = '';
|
||||
|
||||
$.each( response.errors, function( index, error ) {
|
||||
error_text = error_text + '[' + index + '] ' + error + '<br />';
|
||||
});
|
||||
|
||||
elem.find( '.nf-upgrade-handler__errors__text').html('Processing Error :\'(<br />' + error_text );
|
||||
elem.find( '.nf-upgrade-handler__errors').slideDown();
|
||||
|
||||
$( '#progressbar_' + response.upgrade).slideUp();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var progressbar = $( '#progressbar_' + response.upgrade ).progressbar({
|
||||
value: 100 * ( response.step / response.total_steps )
|
||||
});
|
||||
|
||||
//TODO: move animations to Upgrade object
|
||||
elem.find( '.spinner' ).css( 'display', 'block' ).css( 'visibility', 'visible' );
|
||||
|
||||
elem.find( '.dashicons-no' ).css( 'display', 'none' );
|
||||
|
||||
elem.find( '.inside') .slideDown();
|
||||
|
||||
if ( undefined != response.complete ) {
|
||||
|
||||
//TODO: move animations to Upgrade object
|
||||
elem.find( '.inside' ).slideUp();
|
||||
|
||||
elem.find( '.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' );
|
||||
|
||||
elem.find( '.dashicons-yes').css( 'display', 'block' );
|
||||
|
||||
if ( undefined != response.nextUpgrade ) {
|
||||
upgradeHandler.upgrade = response.nextUpgrade;
|
||||
|
||||
$( '#nf_upgrade_' + upgradeHandler.upgrade ).find( '.spinner' ).css( 'display', 'block' ).css( 'visibility', 'visible' );
|
||||
|
||||
$( '#nf_upgrade_' + upgradeHandler.upgrade ).find( '.inside') .slideDown();
|
||||
|
||||
upgradeHandler.process();
|
||||
return;
|
||||
}
|
||||
|
||||
console.log( 'DEBUG: NF_UpgradeHandler says "It is finished!"' );
|
||||
|
||||
$( '.nf-upgrade-complete' ).nfAdminModal( 'open' );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
upgradeHandler.process( response.step, response.total_steps, response.args );
|
||||
}
|
||||
).fail(function() {
|
||||
alert( "error" );
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
function Upgrade( name ) {
|
||||
|
||||
this.name = name;
|
||||
|
||||
this.elem = '#nf_upgrade_' + name;
|
||||
|
||||
this.open = function() {
|
||||
|
||||
jQuery( this.elem).slideDown();
|
||||
|
||||
};
|
||||
|
||||
this.close = function() {
|
||||
|
||||
jQuery( this.elem).slideUp();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
if( "undefined" != typeof nfUpgradeHandler ) {
|
||||
|
||||
console.log('DEBUG: NF_UpgradeHandler first upgrades is ' + nfUpgradeHandler.upgrade);
|
||||
|
||||
var upgradeHandler = new UpgradeHandler(nfUpgradeHandler.upgrade);
|
||||
|
||||
$('.progressbar').progressbar({value: 0});
|
||||
|
||||
var first_upgrade = $('#nf_upgrade_' + upgradeHandler.upgrade);
|
||||
|
||||
//TODO: move animations to Upgrade object
|
||||
first_upgrade.find('.spinner').css('display', 'block').css('visibility', 'visible');
|
||||
|
||||
first_upgrade.find('.dashicons-no').css('display', 'none');
|
||||
|
||||
first_upgrade.find('.inside').slideDown();
|
||||
|
||||
upgradeHandler.process();
|
||||
|
||||
} else {
|
||||
|
||||
// No Upgrades to run, return to All Forms Page
|
||||
document.location.href = "admin.php?page=ninja-forms";
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
jQuery(document).ready(function($) {
|
||||
|
||||
|
||||
$( '#settings-type' ).change( function() {
|
||||
var val = this.value;
|
||||
$( '.notification-type' ).hide();
|
||||
$( '#notification-' + val ).show();
|
||||
});
|
||||
|
||||
$( document ).on( 'click', '.notification-delete', function(e) {
|
||||
e.preventDefault();
|
||||
var answer = confirm( commonL10n.warnDelete );
|
||||
var tr = $( this ).parent().parent().parent().parent();
|
||||
var n_id = $( this ).data( 'n_id' );
|
||||
console.log( n_id );
|
||||
if(answer){
|
||||
$.post( ajaxurl, { n_id: n_id, action: 'nf_delete_notification', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function( response ) {
|
||||
$( tr ).css( 'background-color', '#FF0000' ).fadeOut( 'slow', function() {
|
||||
$(this).remove();
|
||||
} );
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$( document ).on( 'click', '.notification-activate', function(e) {
|
||||
e.preventDefault();
|
||||
var tr = $( this ).parent().parent().parent().parent();
|
||||
var activate_action = $( this ).data( 'action' );
|
||||
var n_id = $( this ).data( 'n_id' );
|
||||
var that = this;
|
||||
$.post( ajaxurl, { n_id: n_id, activate_action: activate_action, action: 'nf_' + activate_action + '_notification', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function( response ) {
|
||||
$( tr ).removeClass( 'nf-notification-active' );
|
||||
$( tr ).removeClass( 'nf-notification-inactive' );
|
||||
|
||||
if ( activate_action == 'activate' ) {
|
||||
$( tr ).addClass( 'nf-notification-active' );
|
||||
$( that ).html( nf_notifications.deactivate );
|
||||
$( that ).data( 'action', 'deactivate' );
|
||||
} else {
|
||||
$( tr ).addClass( 'nf-notification-inactive' );
|
||||
$( that ).html( nf_notifications.activate );
|
||||
$( that ).data( 'action', 'activate' );
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$( '.nf-tokenize' ).each( function() {
|
||||
var limit = $( this ).data( 'token-limit' );
|
||||
var key = $( this ).data( 'key' );
|
||||
var type = $( this ).data( 'type' );
|
||||
$( this ).tokenfield({
|
||||
autocomplete: {
|
||||
source: nf_notifications.search_fields[ type ],
|
||||
delay: 100,
|
||||
},
|
||||
tokens: nf_notifications.tokens[ key ],
|
||||
delimiter: [ '`' ],
|
||||
showAutocompleteOnFocus: true,
|
||||
beautify: false,
|
||||
limit: limit,
|
||||
createTokensOnBlur: true
|
||||
});
|
||||
});
|
||||
|
||||
$( document ).on( 'click', '.nf-insert-field', function(e) {
|
||||
e.preventDefault();
|
||||
var field_id = $( this ).prev().prev( '.nf-fields-combobox' ).val();
|
||||
if ( field_id != '' && field_id != null ) {
|
||||
var shortcode = '[ninja_forms_field id=' + field_id + ']';
|
||||
window.parent.send_to_editor( shortcode );
|
||||
}
|
||||
});
|
||||
|
||||
$( document ).on( 'click', '.nf-insert-all-fields', function(e) {
|
||||
e.preventDefault();
|
||||
var shortcode = '[ninja_forms_all_fields]';
|
||||
window.parent.send_to_editor( shortcode );
|
||||
});
|
||||
|
||||
$( '.nf-fields-combobox' ).combobox();
|
||||
|
||||
$( '.ui-combobox-input' ).focus( function(e) {
|
||||
var selected = $( this ).parent().prev( '.nf-fields-combobox' ).val();
|
||||
if ( selected == '' || selected == null ) {
|
||||
this.value = '';
|
||||
} else {
|
||||
$( this ).select();
|
||||
}
|
||||
});
|
||||
|
||||
$( '.ui-combobox-input' ).mouseup(function(e){
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$( '.ui-combobox-input' ).blur( function(e) {
|
||||
if ( this.value == '' ) {
|
||||
this.value = $( this ).parent().prev( '.nf-fields-combobox' ).data( 'first-option' );
|
||||
}
|
||||
});
|
||||
|
||||
$( '#filter-type' ).change( function(e) {
|
||||
if ( this.value == '' ) {
|
||||
var url = nf_notifications.filter_type;
|
||||
} else {
|
||||
var url = nf_notifications.filter_type + '&type=' + this.value
|
||||
}
|
||||
$( '.spinner' ).show();
|
||||
document.location.href = url;
|
||||
});
|
||||
|
||||
$( '#toggle_email_advanced' ).click( function(e) {
|
||||
e.preventDefault();
|
||||
$( '#email_advanced' ).toggle();
|
||||
});
|
||||
|
||||
});
|
||||
|
|
@ -1,96 +0,0 @@
|
|||
jQuery(document).ready(function($) {
|
||||
|
||||
var progressbar = $( "#progressbar" ),
|
||||
progressLabel = $( ".progress-label" );
|
||||
|
||||
progressbar.progressbar({
|
||||
value: false,
|
||||
change: function() {
|
||||
var value = parseInt( progressbar.progressbar( "value" ) );
|
||||
if ( value == 90 ) {
|
||||
nfProgressBar.currentLabel = 1;
|
||||
} else if ( value % 10 == 0 ) {
|
||||
nfProgressBar.changeTextLabel();
|
||||
}
|
||||
var text = nfProgressBar.getTextLabel();
|
||||
progressLabel.text( text + " " + progressbar.progressbar( "value" ) + "%" );
|
||||
},
|
||||
complete: function() {
|
||||
progressLabel.text( "Complete!" );
|
||||
}
|
||||
});
|
||||
|
||||
if ( nfProcessingAction != 'none' ) {
|
||||
var nfProgressBar = {
|
||||
labels: nf_processing.step_labels,
|
||||
currentLabel: 0,
|
||||
getTextLabel: function() {
|
||||
var label = this.labels[ this.currentLabel ];
|
||||
return label;
|
||||
},
|
||||
changeTextLabel: function() {
|
||||
var max = Object.keys( this.labels ).length;
|
||||
if ( max == 1 ) {
|
||||
max = 0;
|
||||
}
|
||||
var labelNum = Math.floor( Math.random() * ( max - 2 + 1 ) ) + 1;
|
||||
this.currentLabel = labelNum;
|
||||
}
|
||||
};
|
||||
|
||||
var nfProcessing = {
|
||||
setup: function() {
|
||||
// Figure out when we're going to change the size of the bar.
|
||||
this.interval = Math.floor( 100 / parseInt( this.totalSteps ) );
|
||||
},
|
||||
process: function() {
|
||||
|
||||
$.post( ajaxurl, { step: this.step, total_steps: nfProcessing.totalSteps, args: this.args, action: nfProcessingAction }, function( response ) {
|
||||
response = $.parseJSON( response );
|
||||
nfProcessing.step = response.step;
|
||||
nfProcessing.totalSteps = response.total_steps;
|
||||
nfProcessing.args = response.args;
|
||||
nfProcessing.errors = response.errors;
|
||||
|
||||
if ( nfProcessing.errors ) {
|
||||
|
||||
$( "#nf-upgrade-errors").removeClass('hidden');
|
||||
|
||||
$.each( nfProcessing.errors, function( index, error ) {
|
||||
$(".nf-upgrade-errors-list").append('<li>ERROR: ' + error + '</li>');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if ( nfProcessing.runSetup == 1 ) {
|
||||
nfProcessing.setup();
|
||||
nfProcessing.runSetup = 0;
|
||||
}
|
||||
|
||||
if ( ! response.complete ) {
|
||||
nfProcessing.progress();
|
||||
nfProcessing.process();
|
||||
} else {
|
||||
progressbar.progressbar( "value", 100 );
|
||||
if ( typeof response.redirect != 'undefined' && response.redirect != '' ) {
|
||||
document.location.href = response.redirect;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
progress: function() {
|
||||
var val = progressbar.progressbar( "value" ) || 0;
|
||||
|
||||
progressbar.progressbar( "value", val + this.interval );
|
||||
|
||||
},
|
||||
step: 'loading',
|
||||
totalSteps: 0,
|
||||
runSetup: 1,
|
||||
interval: 0,
|
||||
args: nfProcessingArgs,
|
||||
}
|
||||
|
||||
nfProcessing.process();
|
||||
}
|
||||
});
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
jQuery(document).ready(function($) {
|
||||
|
||||
var nf_columns = {
|
||||
init: function() {
|
||||
//this.move_row_actions();
|
||||
// Remove our "ID" checkbox.
|
||||
$( '#id-hide' ).parent().remove();
|
||||
var that = this;
|
||||
$( document ).on( 'click', '.hide-column-tog', that.save_hidden_columns );
|
||||
},
|
||||
save_hidden_columns: function() {
|
||||
// Send our hidden columns to our backend for saving.
|
||||
var hidden = columns.hidden();
|
||||
$.post(
|
||||
ajaxurl,
|
||||
{
|
||||
form_id: nf_sub.form_id,
|
||||
hidden: hidden,
|
||||
action:'nf_hide_columns'
|
||||
}
|
||||
);
|
||||
// Move our row-actions
|
||||
//nf_columns.move_row_actions();
|
||||
},
|
||||
move_row_actions: function() {
|
||||
// Move our row-actions class to our first column.
|
||||
$( "#the-list tr" ).each( function( e ) {
|
||||
var first_column = $( this ).find( 'td:visible' ).eq(0);
|
||||
if ( typeof $( first_column ).html() == 'undefined' ) {
|
||||
first_column = $( this ).find( 'td:first' );
|
||||
}
|
||||
$( this ).find( 'td div.row-actions' ).detach().appendTo( first_column );
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
nf_columns.init();
|
||||
|
||||
$( '.datepicker' ).datepicker( nf_sub.datepicker_args );
|
||||
|
||||
$( document ).on( 'change', '.nf-form-jump', function( e ) {
|
||||
$( '#posts-filter' ).submit();
|
||||
});
|
||||
|
||||
$( document ).on( 'submit', function( e ) {
|
||||
$( '.spinner' ).show();
|
||||
if ( $( 'select[name="action"]' ).val() == 'export' || $( 'select[name="action2"]' ).val() == 'export' ) {
|
||||
setTimeout(function(){ // Delay for Chrome
|
||||
$( 'input:checkbox' ).attr( 'checked', false );
|
||||
$( '.spinner' ).hide();
|
||||
$( 'select[name="action"]' ).val( '-1' );
|
||||
$( 'select[name="action2"]' ).val( '-1' );
|
||||
}, 2000);
|
||||
}
|
||||
});
|
||||
|
||||
$( '.screen-options' ).prepend( $( '#nf-subs-screen-options' ).html() );
|
||||
$( '#nf-subs-screen-options' ).remove();
|
||||
|
||||
});
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1 +0,0 @@
|
|||
!function(global){"use strict";function keydown(e){var id,k=e?e.keyCode:event.keyCode;if(!held[k]){held[k]=!0;for(id in sequences)sequences[id].keydown(k)}}function keyup(e){var k=e?e.keyCode:event.keyCode;held[k]=!1}function resetHeldKeys(){var k;for(k in held)held[k]=!1}function on(obj,type,fn){obj.addEventListener?obj.addEventListener(type,fn,!1):obj.attachEvent&&(obj["e"+type+fn]=fn,obj[type+fn]=function(){obj["e"+type+fn](window.event)},obj.attachEvent("on"+type,obj[type+fn]))}var cheet,Sequence,sequences={},keys={backspace:8,tab:9,enter:13,"return":13,shift:16,"⇧":16,control:17,ctrl:17,"⌃":17,alt:18,option:18,"⌥":18,pause:19,capslock:20,esc:27,space:32,pageup:33,pagedown:34,end:35,home:36,left:37,L:37,"←":37,up:38,U:38,"↑":38,right:39,R:39,"→":39,down:40,D:40,"↓":40,insert:45,"delete":46,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,a:65,b:66,c:67,d:68,e:69,f:70,g:71,h:72,i:73,j:74,k:75,l:76,m:77,n:78,o:79,p:80,q:81,r:82,s:83,t:84,u:85,v:86,w:87,x:88,y:89,z:90,"⌘":91,command:91,kp_0:96,kp_1:97,kp_2:98,kp_3:99,kp_4:100,kp_5:101,kp_6:102,kp_7:103,kp_8:104,kp_9:105,kp_multiply:106,kp_plus:107,kp_minus:109,kp_decimal:110,kp_divide:111,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,equal:187,"=":187,comma:188,",":188,minus:189,"-":189,period:190,".":190},NOOP=function(){},held={};Sequence=function(str,next,fail,done){var i;for(this.str=str,this.next=next?next:NOOP,this.fail=fail?fail:NOOP,this.done=done?done:NOOP,this.seq=str.split(" "),this.keys=[],i=0;i<this.seq.length;++i)this.keys.push(keys[this.seq[i]]);this.idx=0},Sequence.prototype.keydown=function(keyCode){var i=this.idx;return keyCode!==this.keys[i]?void(i>0&&(this.reset(),this.fail(this.str),cheet.__fail(this.str))):(this.next(this.str,this.seq[i],i,this.seq),cheet.__next(this.str,this.seq[i],i,this.seq),void(++this.idx===this.keys.length&&(this.done(this.str),cheet.__done(this.str),this.reset())))},Sequence.prototype.reset=function(){this.idx=0},cheet=function(str,handlers){var next,fail,done;"function"==typeof handlers?done=handlers:null!==handlers&&void 0!==handlers&&(next=handlers.next,fail=handlers.fail,done=handlers.done),sequences[str]=new Sequence(str,next,fail,done)},cheet.disable=function(str){delete sequences[str]},on(window,"keydown",keydown),on(window,"keyup",keyup),on(window,"blur",resetHeldKeys),on(window,"focus",resetHeldKeys),cheet.__next=NOOP,cheet.next=function(fn){cheet.__next=null===fn?NOOP:fn},cheet.__fail=NOOP,cheet.fail=function(fn){cheet.__fail=null===fn?NOOP:fn},cheet.__done=NOOP,cheet.done=function(fn){cheet.__done=null===fn?NOOP:fn},cheet.reset=function(id){var seq=sequences[id];return seq instanceof Sequence?void seq.reset():void console.warn("cheet: Unknown sequence: "+id)},global.cheet=cheet,"function"==typeof define&&define.amd?define([],function(){return cheet}):"undefined"!=typeof module&&null!==module&&(module.exports=cheet)}(this);
|
||||
|
|
@ -1 +0,0 @@
|
|||
jQuery.fn.nfAdminModal=function(n,d){if(0==jQuery("#nf-admin-modal-backdrop").length){var e='<div id="nf-admin-modal-backdrop" style="display: none;"></div><div id="nf-admin-modal-wrap" class="wp-core-ui" style="display: none;"><div id="nf-admin-modal" tabindex="-1"><div id="admin-modal-title"><span id="nf-modal-title"></span><button type="button" id="nf-admin-modal-close" class="modal-close"><span class="screen-reader-text modal-close">Close</span></button></div><div id="modal-contents-wrapper" style="padding:20px;"><div id="nf-admin-modal-content" class="admin-modal-inside"></div><div class="submitbox" style="display:block;"></div></div></div></div>';jQuery("body").append(e)}"object"==typeof n&&(d=n);var o={title:"",buttons:!1,backgroundClose:!1};if("undefined"==typeof d?(d=jQuery(this).data("nfAdminModal"),"undefined"==typeof d&&(d=jQuery.extend(o,d))):d=jQuery.extend(o,d),jQuery(this).data("nfAdminModal",d),jQuery(this).hide(),jQuery("#nf-admin-modal-content").html(this.html()),jQuery("#nf-modal-title").html(d.title),d.buttons){jQuery(d.buttons).hide();var a=jQuery(d.buttons).html();jQuery("#modal-contents-wrapper").find(".submitbox").html(a),jQuery("#nf-admin-modal-content").addClass("admin-modal-inside"),jQuery("#modal-contents-wrapper").find(".submitbox").show()}else jQuery("#nf-admin-modal-content").removeClass("admin-modal-inside"),jQuery("#modal-contents-wrapper").find(".submitbox").hide();jQuery("#nf-admin-modal-backdrop").data("backgroundClose",d.backgroundClose),"close"==n?jQuery.fn.nfAdminModal.close():"open"==n&&jQuery.fn.nfAdminModal.open()},jQuery(document).on("click","#nf-admin-modal-backdrop",function(){1==jQuery(this).data("backgroundClose")&&jQuery.fn.nfAdminModal.close()}),jQuery(document).on("click",".modal-close",function(n){n.preventDefault(),jQuery.fn.nfAdminModal.close()}),jQuery.fn.nfAdminModal.close=function(){jQuery("#nf-admin-modal-backdrop").hide(),jQuery("#nf-admin-modal-wrap").hide(),jQuery(document).triggerHandler("nfAdminModalClose")},jQuery.fn.nfAdminModal.open=function(){jQuery("#nf-admin-modal-backdrop").show(),jQuery("#nf-admin-modal-wrap").show(),jQuery(document).triggerHandler("nfAdminModalOpen")};
|
||||
|
|
@ -1 +0,0 @@
|
|||
(function(e,t){e.widget("ui.combobox",{version:"@VERSION",widgetEventPrefix:"combobox",uiCombo:null,uiInput:null,_wasOpen:false,_create:function(){var t=this,n=this.element.hide(),r,i;r=this.uiInput=e("<input />").insertAfter(n).addClass("ui-widget ui-widget-content ui-corner-left ui-combobox-input").val(n.children(":selected").text()).attr("tabindex",n.attr("tabindex"));i=this.uiCombo=r.wrap("<span>").parent().addClass("ui-combobox").insertAfter(n);r.autocomplete({delay:0,minLength:0,appendTo:i,source:e.proxy(this,"_linkSelectList")});e("<button>").attr("tabIndex",-1).attr("type","button").insertAfter(r).button({icons:{primary:"ui-icon-triangle-1-s"},text:false}).removeClass("ui-corner-all").addClass("ui-corner-right ui-button-icon ui-combobox-button");r.data("ui-autocomplete")._renderItem=function(t,n){return e("<li>").append(e("<a>").html(n.label)).appendTo(t)};this._on(this._events)},_linkSelectList:function(t,n){var r=new RegExp(e.ui.autocomplete.escapeRegex(t.term),"i");n(this.element.children("option").map(function(){var n=e(this).text();if(this.value&&(!t.term||r.test(n))){var i={label:n,value:n,option:this};if(t.term){i.label=n.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+e.ui.autocomplete.escapeRegex(t.term)+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")}return i}}))},_events:{"autocompletechange input":function(t,n){var r=e(t.currentTarget);var i=n.item?n.item.option:null;if(!n.item){var s=new RegExp("^"+e.ui.autocomplete.escapeRegex(r.val())+"$","i"),o=false,u=null,a=0,f=-1,l=-1,c=null;if(this.options.autofillsinglematch){u=new RegExp(e.ui.autocomplete.escapeRegex(r.val()),"i")}this.element.children("option").each(function(){var t=e(this).text();if(t.match(s)){this.selected=o=true;return false}if(u){f++;if(t.match(u)){a++;c=e(this);l=f}}});if(!o){if(a==1){i=c[0];i.selected=true;var h=c.text();r.val(h);r.data("ui-autocomplete").term=h;this.element.prop("selectedIndex",l);console.log("Found single match with '"+h+"'")}else{r.val("");r.data("ui-autocomplete").term="";this.element.prop("selectedIndex",-1)}}}this._trigger("change",t,{item:i})},"autocompleteselect input":function(e,t){t.item.option.selected=true;this._trigger("select",e,{item:t.item.option})},"autocompleteopen input":function(e,t){this.uiCombo.children(".ui-autocomplete").outerWidth(this.uiCombo.outerWidth(true))},"mousedown .ui-combobox-button":function(e){this._wasOpen=this.uiInput.autocomplete("widget").is(":visible")},"click .ui-combobox-button":function(e){this.uiInput.focus();if(this._wasOpen)return;this.uiInput.autocomplete("search","")}},value:function(e){var t=this.element,n=false,r;if(!arguments.length){r=t.children(":selected");return r.length>0?r.val():null}t.prop("selectedIndex",-1);t.children("option").each(function(){if(this.value==e){this.selected=n=true;return false}});if(n){this.uiInput.val(t.children(":selected").text())}else{this.uiInput.val("");this.element.prop("selectedIndex",-1)}},_destroy:function(){this.element.show();this.uiCombo.replaceWith(this.element)},widget:function(){return this.uiCombo},_getCreateEventData:function(){return{select:this.element,combo:this.uiCombo,input:this.uiInput}}})})(jQuery)
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1 +0,0 @@
|
|||
jQuery(document).ready(function(e){function s(s){this.upgrade=s,this.process=function(s,i,d){s="undefined"!=typeof s?s:0,total_step="undefined"!=typeof total_step?total_step:0,d="undefined"!=typeof d?d:[],console.log("Upgrade: "+this.upgrade),e.post(ajaxurl,{upgrade:this.upgrade,step:parseInt(s),total_steps:parseInt(i),args:d,action:"nf_upgrade_handler"},function(s){var i=e("#nf_upgrade_"+n.upgrade);try{s=e.parseJSON(s)}catch(d){return i.find(".spinner").css("display","none").css("visibility","hidden"),i.find(".dashicons-no").css("display","block"),i.find(".nf-upgrade-handler__errors__text").html("Bad Response :'(<br/>"+d+"<br />"+s),void i.find(".nf-upgrade-handler__errors").slideDown()}if(console.log("DEBUG: NF_UpgradeHandler step response: "),console.log(s),void 0==s)return i.find(".spinner").css("display","none").css("visibility","hidden"),i.find(".dashicons-no").css("display","block"),i.find(".nf-upgrade-handler__errors__text").html("Empty Response :'("),void i.find(".nf-upgrade-handler__errors").slideDown();if(s.errors){i.find(".spinner").css("display","none").css("visibility","hidden"),i.find(".dashicons-no").css("display","block");var r="";return e.each(s.errors,function(e,s){r=r+"["+e+"] "+s+"<br />"}),i.find(".nf-upgrade-handler__errors__text").html("Processing Error :'(<br />"+r),i.find(".nf-upgrade-handler__errors").slideDown(),void e("#progressbar_"+s.upgrade).slideUp()}e("#progressbar_"+s.upgrade).progressbar({value:100*(s.step/s.total_steps)});return i.find(".spinner").css("display","block").css("visibility","visible"),i.find(".dashicons-no").css("display","none"),i.find(".inside").slideDown(),void 0!=s.complete?(i.find(".inside").slideUp(),i.find(".spinner").css("display","none").css("visibility","hidden"),i.find(".dashicons-yes").css("display","block"),void 0!=s.nextUpgrade?(n.upgrade=s.nextUpgrade,e("#nf_upgrade_"+n.upgrade).find(".spinner").css("display","block").css("visibility","visible"),e("#nf_upgrade_"+n.upgrade).find(".inside").slideDown(),void n.process()):(console.log('DEBUG: NF_UpgradeHandler says "It is finished!"'),void e(".nf-upgrade-complete").nfAdminModal("open"))):void n.process(s.step,s.total_steps,s.args)}).fail(function(){alert("error")})}}if(e(".nf-upgrade-complete").nfAdminModal({title:nfUpgradeHandler.nf_upgrade_complete_title,buttons:".nf-upgrade-complete-buttons"}),"undefined"!=typeof nfUpgradeHandler){console.log("DEBUG: NF_UpgradeHandler first upgrades is "+nfUpgradeHandler.upgrade);var n=new s(nfUpgradeHandler.upgrade);e(".progressbar").progressbar({value:0});var i=e("#nf_upgrade_"+n.upgrade);i.find(".spinner").css("display","block").css("visibility","visible"),i.find(".dashicons-no").css("display","none"),i.find(".inside").slideDown(),n.process()}else document.location.href="admin.php?page=ninja-forms"});
|
||||
|
|
@ -1 +0,0 @@
|
|||
jQuery(document).ready(function(e){e("#settings-type").change(function(){var t=this.value;e(".notification-type").hide();e("#notification-"+t).show()});e(document).on("click",".notification-delete",function(t){t.preventDefault();var n=confirm(commonL10n.warnDelete);var r=e(this).parent().parent().parent().parent();var i=e(this).data("n_id");console.log(i);if(n){e.post(ajaxurl,{n_id:i,action:"nf_delete_notification",nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce},function(t){e(r).css("background-color","#FF0000").fadeOut("slow",function(){e(this).remove()})})}});e(document).on("click",".notification-activate",function(t){t.preventDefault();var n=e(this).parent().parent().parent().parent();var r=e(this).data("action");var i=e(this).data("n_id");var s=this;e.post(ajaxurl,{n_id:i,activate_action:r,action:"nf_"+r+"_notification",nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce},function(t){e(n).removeClass("nf-notification-active");e(n).removeClass("nf-notification-inactive");if(r=="activate"){e(n).addClass("nf-notification-active");e(s).html(nf_notifications.deactivate);e(s).data("action","deactivate")}else{e(n).addClass("nf-notification-inactive");e(s).html(nf_notifications.activate);e(s).data("action","activate")}})});e(".nf-tokenize").each(function(){var t=e(this).data("token-limit");var n=e(this).data("key");var r=e(this).data("type");e(this).tokenfield({autocomplete:{source:nf_notifications.search_fields[r],delay:100},tokens:nf_notifications.tokens[n],delimiter:["`"],showAutocompleteOnFocus:true,beautify:false,limit:t,createTokensOnBlur:true})});e(document).on("click",".nf-insert-field",function(t){t.preventDefault();var n=e(this).prev().prev(".nf-fields-combobox").val();if(n!=""&&n!=null){var r="[ninja_forms_field id="+n+"]";window.parent.send_to_editor(r)}});e(document).on("click",".nf-insert-all-fields",function(e){e.preventDefault();var t="[ninja_forms_all_fields]";window.parent.send_to_editor(t)});e(".nf-fields-combobox").combobox();e(".ui-combobox-input").focus(function(t){var n=e(this).parent().prev(".nf-fields-combobox").val();if(n==""||n==null){this.value=""}else{e(this).select()}});e(".ui-combobox-input").mouseup(function(e){e.preventDefault()});e(".ui-combobox-input").blur(function(t){if(this.value==""){this.value=e(this).parent().prev(".nf-fields-combobox").data("first-option")}});e("#filter-type").change(function(t){if(this.value==""){var n=nf_notifications.filter_type}else{var n=nf_notifications.filter_type+"&type="+this.value}e(".spinner").show();document.location.href=n});e("#toggle_email_advanced").click(function(t){t.preventDefault();e("#email_advanced").toggle()})})
|
||||
|
|
@ -1 +0,0 @@
|
|||
jQuery(document).ready(function(e){var r=e("#progressbar"),t=e(".progress-label");if(r.progressbar({value:!1,change:function(){var e=parseInt(r.progressbar("value"));90==e?s.currentLabel=1:e%10==0&&s.changeTextLabel();var a=s.getTextLabel();t.text(a+" "+r.progressbar("value")+"%")},complete:function(){t.text("Complete!")}}),"none"!=nfProcessingAction){var s={labels:nf_processing.step_labels,currentLabel:0,getTextLabel:function(){var e=this.labels[this.currentLabel];return e},changeTextLabel:function(){var e=Object.keys(this.labels).length;1==e&&(e=0);var r=Math.floor(Math.random()*(e-2+1))+1;this.currentLabel=r}},a={setup:function(){this.interval=Math.floor(100/parseInt(this.totalSteps))},process:function(){e.post(ajaxurl,{step:this.step,total_steps:a.totalSteps,args:this.args,action:nfProcessingAction},function(t){t=e.parseJSON(t),a.step=t.step,a.totalSteps=t.total_steps,a.args=t.args,a.errors=t.errors,a.errors&&(e("#nf-upgrade-errors").removeClass("hidden"),e.each(a.errors,function(r,t){e(".nf-upgrade-errors-list").append("<li>ERROR: "+t+"</li>")})),1==a.runSetup&&(a.setup(),a.runSetup=0),t.complete?(r.progressbar("value",100),"undefined"!=typeof t.redirect&&""!=t.redirect&&(document.location.href=t.redirect)):(a.progress(),a.process())})},progress:function(){var e=r.progressbar("value")||0;r.progressbar("value",e+this.interval)},step:"loading",totalSteps:0,runSetup:1,interval:0,args:nfProcessingArgs};a.process()}});
|
||||
|
|
@ -1 +0,0 @@
|
|||
jQuery(document).ready(function(e){var t={init:function(){e("#id-hide").parent().remove();var t=this;e(document).on("click",".hide-column-tog",t.save_hidden_columns)},save_hidden_columns:function(){var t=columns.hidden();e.post(ajaxurl,{form_id:nf_sub.form_id,hidden:t,action:"nf_hide_columns"})},move_row_actions:function(){e("#the-list tr").each(function(t){var n=e(this).find("td:visible").eq(0);if(typeof e(n).html()=="undefined"){n=e(this).find("td:first")}e(this).find("td div.row-actions").detach().appendTo(n)})}};t.init();e(".datepicker").datepicker({dateFormat:nf_sub.date_format});e(document).on("change",".nf-form-jump",function(t){e("#posts-filter").submit()});e(document).on("submit",function(t){e(".spinner").show();if(e('select[name="action"]').val()=="export"||e('select[name="action2"]').val()=="export"){setTimeout(function(){e("input:checkbox").attr("checked",false);e(".spinner").hide();e('select[name="action"]').val("-1");e('select[name="action2"]').val("-1")},2e3)}});e(".screen-options").prepend(e("#nf-subs-screen-options").html());e("#nf-subs-screen-options").remove()})
|
||||
|
|
@ -1,122 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Add a button to tinyMCE editors when eidting posts/pages.
|
||||
*
|
||||
* @since 2.9.22
|
||||
*/
|
||||
|
||||
class NF_Admin_AddFormModal {
|
||||
|
||||
function __construct() {
|
||||
// Add a tinyMCE button to our post and page editor
|
||||
add_filter( 'media_buttons_context', array( $this, 'insert_form_tinymce_buttons' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our tinyMCE field buttons
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function insert_form_tinymce_buttons( $context ) {
|
||||
global $pagenow;
|
||||
|
||||
if ( 'post.php' != $pagenow ) {
|
||||
return $context;
|
||||
}
|
||||
$html = '<style>
|
||||
span.nf-insert-form {
|
||||
color:#888;
|
||||
font: 400 18px/1 dashicons;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
vertical-align: text-top;
|
||||
margin: 0 2px 0 0;
|
||||
}
|
||||
</style>';
|
||||
$html .= '<a href="#" class="button-secondary nf-insert-form"><span class="nf-insert-form dashicons dashicons-feedback"></span> ' . __( 'Add Form', 'ninja-forms' ) . '</a>';
|
||||
|
||||
wp_enqueue_script( 'nf-combobox',
|
||||
NF_PLUGIN_URL . 'assets/js/min/combobox.min.js',
|
||||
array( 'jquery', 'jquery-ui-core', 'jquery-ui-button', 'jquery-ui-autocomplete', 'nf-admin-modal' ) );
|
||||
|
||||
wp_enqueue_style( 'nf-combobox',
|
||||
NF_PLUGIN_URL . 'assets/css/combobox.css' );
|
||||
|
||||
wp_enqueue_style( 'nf-admin-modal',
|
||||
NF_PLUGIN_URL . 'assets/css/admin-modal.css' );
|
||||
|
||||
wp_enqueue_style( 'jquery-smoothness', NINJA_FORMS_URL .'css/smoothness/jquery-smoothness.css' );
|
||||
|
||||
add_action( 'admin_footer', array( $this, 'output_tinymce_button_js' ) );
|
||||
return $context . ' ' . $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our tinyMCE field buttons
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function output_tinymce_button_js( $context ) {
|
||||
?>
|
||||
<div id="nf-insert-form-modal" style="height:350px;">
|
||||
<p>
|
||||
<?php
|
||||
$all_forms = Ninja_Forms()->forms()->get_all();
|
||||
$first_option = __( 'Select a form or type to search', 'ninja-forms' );
|
||||
echo '<select class="nf-forms-combobox" id="nf_form_select" data-first-option="' . $first_option . '">';
|
||||
echo '<option value="">' . $first_option .'</option>';
|
||||
foreach( $all_forms as $form_id ) {
|
||||
$label = esc_html( Ninja_Forms()->form( $form_id )->get_setting( 'form_title' ) );
|
||||
if ( strlen( $label ) > 30 )
|
||||
$label = substr( $label, 0, 30 ) . '...';
|
||||
|
||||
echo '<option value="' . $form_id . '">' . $label . ' - ID: ' . $form_id . '</option>';
|
||||
}
|
||||
echo '</select>';
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="nf-insert-form-buttons">
|
||||
<div id="nf-admin-modal-cancel">
|
||||
<a class="submitdelete deletion modal-close" href="#"><?php _e( 'Cancel', 'ninja-forms' ); ?></a>
|
||||
</div>
|
||||
<div id="nf-admin-modal-update">
|
||||
<a class="button-primary" id="nf-insert-form" href="#"><?php _e( 'Insert', 'ninja-forms' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery( document ).ready( function( $ ) {
|
||||
|
||||
$( '#nf-insert-form-modal' ).nfAdminModal( { title: '<?php _e( "Add Form", "ninja-forms" ); ?>', buttons: '#nf-insert-form-buttons', backgroundClose: true } );
|
||||
$( document ).on( 'click', '.nf-insert-form', function( e ) {
|
||||
e.preventDefault();
|
||||
$( '#nf-insert-form-modal' ).nfAdminModal( 'open' );
|
||||
$( '.nf-forms-combobox' ).combobox();
|
||||
$( '#nf-admin-modal-content .ui-autocomplete-input' ).focus().select();
|
||||
} );
|
||||
|
||||
$( document ).on( 'click', '#nf-insert-form', function( e ) {
|
||||
e.preventDefault();
|
||||
var form_id = $( this ).parent().parent().parent().find( '#nf_form_select' ).val();
|
||||
var shortcode = '[ninja_form id=' + form_id + ']';
|
||||
window.parent.send_to_editor( shortcode );
|
||||
$.fn.nfAdminModal.close();
|
||||
} );
|
||||
|
||||
$( document ).on( 'nfAdminModalClose.destroyCombo', function( e ) {
|
||||
$( '.nf-forms-combobox' ).combobox( 'destroy' );
|
||||
} );
|
||||
} );
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
class NF_Download_All_Subs extends NF_Step_Processing {
|
||||
|
||||
function __construct() {
|
||||
$this->action = 'download_all_subs';
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function loading() {
|
||||
$form_id = isset( $this->args['form_id'] ) ? absint( $this->args['form_id'] ) : 0;
|
||||
|
||||
if ( empty( $form_id ) ) {
|
||||
|
||||
return array( 'complete' => true );
|
||||
}
|
||||
|
||||
$sub_count = nf_get_sub_count( $form_id );
|
||||
|
||||
if( empty( $this->total_steps ) || $this->total_steps <= 1 ) {
|
||||
$this->total_steps = round( ( $sub_count / 250 ), 0 ) + 2;
|
||||
}
|
||||
|
||||
$args = array(
|
||||
'total_steps' => $this->total_steps,
|
||||
);
|
||||
|
||||
$this->args['filename'] = $this->random_filename( 'all-subs' );
|
||||
update_user_option( get_current_user_id(), 'nf_download_all_subs_filename', $this->args['filename'] );
|
||||
$this->redirect = esc_url_raw( add_query_arg( array( 'download_all' => $this->args['filename'] ), $this->args['redirect'] ) );
|
||||
|
||||
$this->loaded = true;
|
||||
return $args;
|
||||
}
|
||||
|
||||
public function step() {
|
||||
if( ! is_numeric( $this->args[ 'form_id' ] ) ){
|
||||
wp_die( __( 'Invalid form id', 'ninja-forms' ) );
|
||||
}
|
||||
|
||||
$this->args[ 'filename' ] = wp_kses_post( $this->args[ 'filename' ] );
|
||||
|
||||
$exported_subs = get_user_option( get_current_user_id(), 'nf_download_all_subs_ids' );
|
||||
if ( ! is_array( $exported_subs ) ) {
|
||||
$exported_subs = array();
|
||||
}
|
||||
|
||||
$previous_name = get_user_option( get_current_user_id(), 'nf_download_all_subs_filename' );
|
||||
if ( $previous_name ) {
|
||||
$this->args['filename'] = $previous_name;
|
||||
}
|
||||
|
||||
$args = array(
|
||||
'posts_per_page' => 250,
|
||||
'paged' => $this->step,
|
||||
'post_type' => 'nf_sub',
|
||||
'meta_query' => array(
|
||||
array(
|
||||
'key' => '_form_id',
|
||||
'value' => $this->args['form_id'],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$subs_results = get_posts( $args );
|
||||
|
||||
if ( is_array( $subs_results ) && ! empty( $subs_results ) ) {
|
||||
$upload_dir = wp_upload_dir();
|
||||
$file_path = trailingslashit( $upload_dir['path'] ) . $this->args['filename'] . '.csv';
|
||||
$myfile = fopen( $file_path, 'a' ) or die( 'Unable to open file!' );
|
||||
$x = 0;
|
||||
$export = '';
|
||||
foreach ( $subs_results as $sub ) {
|
||||
$sub_export = Ninja_Forms()->sub( $sub->ID )->export( true );
|
||||
if ( $x > 0 || $this->step > 1 ) {
|
||||
$sub_export = substr( $sub_export, strpos( $sub_export, "\n" ) + 1 );
|
||||
}
|
||||
if ( ! in_array( $sub->ID, $exported_subs ) ) {
|
||||
$export .= $sub_export;
|
||||
$exported_subs[] = $sub->ID;
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
fwrite( $myfile, $export );
|
||||
fclose( $myfile );
|
||||
}
|
||||
|
||||
update_user_option( get_current_user_id(), 'nf_download_all_subs_ids', $exported_subs );
|
||||
}
|
||||
|
||||
public function complete() {
|
||||
delete_user_option( get_current_user_id(), 'nf_download_all_subs_ids' );
|
||||
delete_user_option( get_current_user_id(), 'nf_download_all_subs_filename' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an integar to the end of our filename to make sure it is unique
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7.6
|
||||
* @return $filename
|
||||
*/
|
||||
public function random_filename( $filename ) {
|
||||
$upload_dir = wp_upload_dir();
|
||||
$file_path = trailingslashit( $upload_dir['path'] ) . $filename . '.csv';
|
||||
if ( file_exists ( $file_path ) ) {
|
||||
for ($x = 0; $x < 999 ; $x++) {
|
||||
$tmp_name = $filename . '-' . $x;
|
||||
$tmp_path = trailingslashit( $upload_dir['path'] );
|
||||
if ( file_exists( $tmp_path . $tmp_name . '.csv' ) ) {
|
||||
$this->random_filename( $tmp_name );
|
||||
break;
|
||||
} else {
|
||||
$this->filename = $tmp_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $filename;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,213 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Handles the output of our form, as well as interacting with its settings.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Form
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.7
|
||||
*/
|
||||
|
||||
class NF_Form {
|
||||
|
||||
/**
|
||||
* @var form_id
|
||||
* @since 2.7
|
||||
*/
|
||||
var $form_id;
|
||||
|
||||
/**
|
||||
* @var settings - Form Settings
|
||||
* @since 2.7
|
||||
*/
|
||||
var $settings = array();
|
||||
|
||||
/**
|
||||
* @var fields - Form Fields
|
||||
* @since 2.7
|
||||
*/
|
||||
var $fields = array();
|
||||
|
||||
/**
|
||||
* @var fields - Fields List
|
||||
* @since 2.7
|
||||
*/
|
||||
var $field_keys = array();
|
||||
|
||||
/**
|
||||
* @var errors - Form errors
|
||||
* @since 2.7
|
||||
*/
|
||||
var $errors = array();
|
||||
|
||||
/**
|
||||
* Get things started
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return void
|
||||
*/
|
||||
public function __construct( $form_id = '' ) {
|
||||
if ( ! empty ( $form_id ) ) { // We've been passed a form id.
|
||||
// Set our current form id.
|
||||
$this->form_id = $form_id;
|
||||
$this->update_fields();
|
||||
$this->settings = nf_get_form_settings( $form_id );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a form
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return int $form_id
|
||||
*/
|
||||
public function create( $defaults = array() ) {
|
||||
$form_id = nf_insert_object( 'form' );
|
||||
$date_updated = date( 'Y-m-d', current_time( 'timestamp' ) );
|
||||
nf_update_object_meta( $form_id, 'date_updated', $date_updated );
|
||||
|
||||
foreach( $defaults as $meta_key => $meta_value ) {
|
||||
nf_update_object_meta( $form_id, $meta_key, $meta_value );
|
||||
}
|
||||
|
||||
// Add a single event hook that will check to see if this is an orphaned function.
|
||||
$timestamp = strtotime( '+24 hours', time() );
|
||||
$args = array(
|
||||
'form_id' => $form_id
|
||||
);
|
||||
wp_schedule_single_event( $timestamp, 'nf_maybe_delete_form', $args );
|
||||
return $form_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a field into our form
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return bool()
|
||||
*/
|
||||
public function insert_field( $field_id ) {
|
||||
return nf_add_relationship( $field_id, 'field', $this->form_id, 'form' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our fields
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return void
|
||||
*/
|
||||
public function update_fields() {
|
||||
$this->fields = nf_get_fields_by_form_id( $this->form_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get one of our form settings.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return string $setting
|
||||
*/
|
||||
public function get_setting( $setting, $bypass_cache = false ) {
|
||||
if ( $bypass_cache ) {
|
||||
return nf_get_object_meta_value( $this->form_id, 'last_sub' );
|
||||
}
|
||||
if ( isset ( $this->settings[ $setting ] ) ) {
|
||||
return $this->settings[ $setting ];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a form setting (this doesn't update anything in the database)
|
||||
* Changes are only applied to this object.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @param string $setting
|
||||
* @param mixed $value
|
||||
* @return bool
|
||||
*/
|
||||
public function update_setting( $setting, $value ) {
|
||||
$this->settings[ $setting ] = $value;
|
||||
nf_update_object_meta( $this->form_id, $setting, $value );
|
||||
$this->dump_cache();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of our settings
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return array $settings
|
||||
*/
|
||||
public function get_all_settings() {
|
||||
return $this->settings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the submissions for this form
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return array $sub_ids
|
||||
*/
|
||||
public function get_subs( $args = array() ) {
|
||||
$args['form_id'] = $this->form_id;
|
||||
return Ninja_Forms()->subs()->get( $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a count of the submissions this form has had
|
||||
*
|
||||
* @access public
|
||||
* @param array $args
|
||||
* @since 2.7
|
||||
* @return int $count
|
||||
*/
|
||||
public function sub_count( $args = array() ) {
|
||||
return count( $this->get_subs( $args ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this form
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
*/
|
||||
public function delete() {
|
||||
global $wpdb;
|
||||
// Delete this object.
|
||||
nf_delete_object( $this->form_id );
|
||||
// Delete any fields on this form.
|
||||
$wpdb->query($wpdb->prepare( "DELETE FROM ".NINJA_FORMS_FIELDS_TABLE_NAME." WHERE form_id = %d", $this->form_id ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the cached form object (transient)
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.17
|
||||
*/
|
||||
public function dump_cache()
|
||||
{
|
||||
delete_transient( 'nf_form_' . $this->form_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Deprecated wrapper for dump_cache()
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.12
|
||||
*/
|
||||
public function dumpCache()
|
||||
{
|
||||
$this->dump_cache();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,93 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Handles adding and removing forms.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Form
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.9
|
||||
*/
|
||||
|
||||
class NF_Forms {
|
||||
|
||||
/**
|
||||
* Store our array of form ids
|
||||
*
|
||||
* @since 2.9
|
||||
*/
|
||||
var $forms = array();
|
||||
|
||||
/**
|
||||
* Get things started
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return void
|
||||
*/
|
||||
public function __construct() {
|
||||
add_action( 'nf_maybe_delete_form', array( $this, 'maybe_delete' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all forms
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return array $forms
|
||||
*/
|
||||
public function get_all( $show_new = false ) {
|
||||
global $wpdb;
|
||||
|
||||
$debug = ! empty ( $_REQUEST['debug'] ) ? true : false;
|
||||
|
||||
if ( empty ( $this->forms ) ) {
|
||||
$forms = nf_get_objects_by_type( 'form' );
|
||||
|
||||
$tmp_array = array();
|
||||
foreach ( $forms as $form ) {
|
||||
$form_id = $form['id'];
|
||||
|
||||
$status = Ninja_Forms()->form( $form_id )->get_setting( 'status' );
|
||||
if ( ( $status == 'new' && $show_new ) || $status != 'new' ) {
|
||||
$title = Ninja_Forms()->form( $form_id )->get_setting( 'form_title' );
|
||||
if ( strpos( $title, '_' ) === 0 ) {
|
||||
if ( $debug )
|
||||
$tmp_array[] = $form_id;
|
||||
} else {
|
||||
$tmp_array[] = $form_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->forms = $tmp_array;
|
||||
}
|
||||
|
||||
return $this->forms;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a form if it is created and not saved within 24 hrs.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return void
|
||||
*/
|
||||
public function maybe_delete( $form_id ) {
|
||||
$status = Ninja_Forms()->form( $form_id )->get_setting( 'status' );
|
||||
if ( 'new' == $status ) {
|
||||
Ninja_Forms()->form( $form_id )->delete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update cached forms
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return void
|
||||
*/
|
||||
public function update_cache( $debug = false, $show_new = false ) {
|
||||
$this->forms = array();
|
||||
$this->get_all( $debug, $show_new );
|
||||
}
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1,256 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
/**
|
||||
* NF_Notices Class
|
||||
*
|
||||
* Can be simply used be adding another line into the nf_admin_notices() function under notices.php
|
||||
*
|
||||
* Can be extended to create more advanced notices to include triggered events
|
||||
*
|
||||
* @since 2.9
|
||||
*/
|
||||
|
||||
class NF_Notices
|
||||
{
|
||||
// Highlander the instance
|
||||
static $instance;
|
||||
|
||||
public static function instance()
|
||||
{
|
||||
if ( ! isset( self::$instance ) ) {
|
||||
self::$instance = new NF_Notices();
|
||||
}
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public $notice_spam = 0;
|
||||
public $notice_spam_max = 1;
|
||||
|
||||
// Basic actions to run
|
||||
public function __construct(){
|
||||
|
||||
// Runs the admin notice ignore function incase a dismiss button has been clicked
|
||||
add_action( 'admin_init', array( $this, 'admin_notice_ignore' ) );
|
||||
|
||||
// Runs the admin notice temp ignore function incase a temp dismiss link has been clicked
|
||||
add_action( 'admin_init', array( $this, 'admin_notice_temp_ignore' ) );
|
||||
|
||||
}
|
||||
|
||||
// Checks to ensure notices aren't disabled and the user has the correct permissions.
|
||||
public function nf_admin_notice() {
|
||||
|
||||
$nf_settings = get_option( 'ninja_forms_settings' );
|
||||
if ( ! isset( $nf_settings[ 'disable_admin_notices' ] ) || ( isset( $nf_settings[ 'disable_admin_notices' ] ) && $nf_settings[ 'disable_admin_notices' ] == 0 ) ){
|
||||
if ( current_user_can( apply_filters( 'ninja_forms_admin_parent_menu_capabilities', 'manage_options' ) ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
// Primary notice function that can be called from an outside function sending necessary variables
|
||||
public function admin_notice( $admin_notices ) {
|
||||
|
||||
// Check options
|
||||
if ( ! $this->nf_admin_notice() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ( $admin_notices as $slug => $admin_notice ) {
|
||||
// Call for spam protection
|
||||
if ( $this->anti_notice_spam() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Check for proper page to display on
|
||||
if ( isset( $admin_notices[ $slug ][ 'pages' ] ) && is_array( $admin_notices[ $slug ][ 'pages' ] )
|
||||
|| isset( $admin_notices[ $slug ][ 'blacklist' ] ) && is_array( $admin_notices[ $slug ][ 'blacklist' ] )
|
||||
) {
|
||||
|
||||
if( ( isset( $admin_notices[ $slug ][ 'blacklist' ] ) && $this->admin_notice_pages_blacklist( $admin_notices[ $slug ][ 'blacklist' ] ) )
|
||||
|| ( isset( $admin_notices[ $slug ][ 'pages' ] ) && ! $this->admin_notice_pages( $admin_notices[ $slug ][ 'pages' ] ) )
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for required fields
|
||||
if ( ! $this->required_fields( $admin_notices[ $slug ] ) ) {
|
||||
|
||||
// Get the current date then set start date to either passed value or current date value and add interval
|
||||
$current_date = current_time( "n/j/Y" );
|
||||
$start = ( isset( $admin_notices[ $slug ][ 'start' ] ) ? $admin_notices[ $slug ][ 'start' ] : $current_date );
|
||||
$start = date( "n/j/Y", strtotime( $start ) );
|
||||
$date_array = explode( '/', $start );
|
||||
$interval = ( isset( $admin_notices[ $slug ][ 'int' ] ) ? $admin_notices[ $slug ][ 'int' ] : 0 );
|
||||
$date_array[1] += $interval;
|
||||
$start = date( "n/j/Y", mktime( 0, 0, 0, $date_array[0], $date_array[1], $date_array[2] ) );
|
||||
|
||||
// This is the main notices storage option
|
||||
$admin_notices_option = get_option( 'nf_admin_notice', array() );
|
||||
// Check if the message is already stored and if so just grab the key otherwise store the message and its associated date information
|
||||
if ( ! array_key_exists( $slug, $admin_notices_option ) ) {
|
||||
$admin_notices_option[ $slug ][ 'start' ] = $start;
|
||||
$admin_notices_option[ $slug ][ 'int' ] = $interval;
|
||||
update_option( 'nf_admin_notice', $admin_notices_option );
|
||||
}
|
||||
|
||||
// Sanity check to ensure we have accurate information
|
||||
// New date information will not overwrite old date information
|
||||
$admin_display_check = ( isset( $admin_notices_option[ $slug ][ 'dismissed' ] ) ? $admin_notices_option[ $slug ][ 'dismissed'] : 0 );
|
||||
$admin_display_start = ( isset( $admin_notices_option[ $slug ][ 'start' ] ) ? $admin_notices_option[ $slug ][ 'start'] : $start );
|
||||
$admin_display_interval = ( isset( $admin_notices_option[ $slug ][ 'int' ] ) ? $admin_notices_option[ $slug ][ 'int'] : $interval );
|
||||
$admin_display_msg = ( isset( $admin_notices[ $slug ][ 'msg' ] ) ? $admin_notices[ $slug ][ 'msg'] : '' );
|
||||
$admin_display_title = ( isset( $admin_notices[ $slug ][ 'title' ] ) ? $admin_notices[ $slug ][ 'title'] : '' );
|
||||
$admin_display_link = ( isset( $admin_notices[ $slug ][ 'link' ] ) ? $admin_notices[ $slug ][ 'link' ] : '' );
|
||||
$output_css = false;
|
||||
|
||||
// Ensure the notice hasn't been hidden and that the current date is after the start date
|
||||
if ( $admin_display_check == 0 && strtotime( $admin_display_start ) <= strtotime( $current_date ) ) {
|
||||
|
||||
// Get remaining query string
|
||||
$query_str = esc_url( add_query_arg( 'nf_admin_notice_ignore', $slug ) );
|
||||
|
||||
// Admin notice display output
|
||||
echo '<div class="update-nag nf-admin-notice">';
|
||||
echo '<div class="nf-notice-logo"></div>';
|
||||
echo ' <p class="nf-notice-title">';
|
||||
echo $admin_display_title;
|
||||
echo ' </p>';
|
||||
echo ' <p class="nf-notice-body">';
|
||||
echo $admin_display_msg;
|
||||
echo ' </p>';
|
||||
echo '<ul class="nf-notice-body nf-red">
|
||||
' . $admin_display_link . '
|
||||
</ul>';
|
||||
echo '<a href="' . $query_str . '" class="dashicons dashicons-dismiss"></a>';
|
||||
echo '</div>';
|
||||
|
||||
$this->notice_spam += 1;
|
||||
$output_css = true;
|
||||
}
|
||||
if ( $output_css ) {
|
||||
wp_enqueue_style( 'nf-admin-notices', NINJA_FORMS_URL .'assets/css/admin-notices.css?nf_ver=' . NF_PLUGIN_VERSION );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Spam protection check
|
||||
public function anti_notice_spam() {
|
||||
|
||||
if ( $this->notice_spam >= $this->notice_spam_max ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ignore function that gets ran at admin init to ensure any messages that were dismissed get marked
|
||||
public function admin_notice_ignore() {
|
||||
|
||||
// If user clicks to ignore the notice, update the option to not show it again
|
||||
if ( isset($_GET['nf_admin_notice_ignore']) && current_user_can( apply_filters( 'ninja_forms_admin_parent_menu_capabilities', 'manage_options' ) ) ) {
|
||||
|
||||
$admin_notices_option = get_option( 'nf_admin_notice', array() );
|
||||
$admin_notices_option[ sanitize_text_field($_GET[ 'nf_admin_notice_ignore' ]) ][ 'dismissed' ] = 1;
|
||||
update_option( 'nf_admin_notice', $admin_notices_option );
|
||||
$query_str = remove_query_arg( 'nf_admin_notice_ignore' );
|
||||
wp_redirect( $query_str );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// Temp Ignore function that gets ran at admin init to ensure any messages that were temp dismissed get their start date changed
|
||||
public function admin_notice_temp_ignore() {
|
||||
|
||||
// If user clicks to temp ignore the notice, update the option to change the start date - default interval of 14 days
|
||||
if ( isset($_GET['nf_admin_notice_temp_ignore']) && current_user_can( apply_filters( 'ninja_forms_admin_parent_menu_capabilities', 'manage_options' ) ) ) {
|
||||
|
||||
$admin_notices_option = get_option( 'nf_admin_notice', array() );
|
||||
|
||||
$current_date = current_time( "n/j/Y" );
|
||||
$date_array = explode( '/', $current_date );
|
||||
$interval = ( isset( $_GET[ 'nf_int' ] ) ? absint($_GET[ 'nf_int' ]) : 14 );
|
||||
$date_array[1] += $interval;
|
||||
$new_start = date( "n/j/Y", mktime( 0, 0, 0, $date_array[0], $date_array[1], $date_array[2] ) );
|
||||
|
||||
$admin_notices_option[ sanitize_text_field($_GET[ 'nf_admin_notice_temp_ignore' ]) ][ 'start' ] = $new_start;
|
||||
$admin_notices_option[ sanitize_text_field($_GET[ 'nf_admin_notice_temp_ignore' ]) ][ 'dismissed' ] = 0;
|
||||
update_option( 'nf_admin_notice', $admin_notices_option );
|
||||
$query_str = remove_query_arg( array( 'nf_admin_notice_temp_ignore', 'nf_int' ) );
|
||||
wp_redirect( $query_str );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
public function admin_notice_pages_blacklist( $pages ) {
|
||||
|
||||
foreach( $pages as $key => $page ) {
|
||||
if ( is_array( $page ) ) {
|
||||
if ( isset( $_GET[ 'page' ] ) && $_GET[ 'page'] == $page[0] && isset( $_GET[ 'tab' ] ) && $_GET[ 'tab' ] == $page[1] ) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ( get_current_screen()->id === $page ) {
|
||||
return true;
|
||||
}
|
||||
if ( isset( $_GET[ 'page' ] ) && $_GET[ 'page'] == $page ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Page check function - This should be called from class extensions if the notice should only show on specific admin pages
|
||||
// Expects an array in the form of IE: array( 'dashboard', 'ninja-forms', array( 'ninja-forms', 'builder' ) )
|
||||
// Function accepts dashboard as a special check and also whatever is passed to page or tab as parameters
|
||||
// The above example will display on dashboard and all of the pages that have page=ninja-forms and any page=ninja-forms&tab=builder which is redundant in the example
|
||||
public function admin_notice_pages( $pages ) {
|
||||
|
||||
foreach( $pages as $key => $page ) {
|
||||
if ( is_array( $page ) ) {
|
||||
if ( isset( $_GET[ 'page' ] ) && $_GET[ 'page'] == $page[0] && isset( $_GET[ 'tab' ] ) && $_GET[ 'tab' ] == $page[1] ) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ( $page == 'all' ) {
|
||||
return true;
|
||||
}
|
||||
if ( get_current_screen()->id === $page ) {
|
||||
return true;
|
||||
}
|
||||
if ( isset( $_GET[ 'page' ] ) && $_GET[ 'page'] == $page ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Required fields check
|
||||
public function required_fields( $fields ) {
|
||||
|
||||
if ( ! isset( $fields[ 'msg' ] ) || ( isset( $fields[ 'msg' ] ) && empty( $fields[ 'msg' ] ) ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( ! isset( $fields[ 'title' ] ) || ( isset( $fields[ 'title' ] ) && empty( $fields[ 'title' ] ) ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Special parameters function that is to be used in any extension of this class
|
||||
public function special_parameters( $admin_notices ) {
|
||||
// Intentionally left blank
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1,92 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
/**
|
||||
* NF_Notices_MP Class
|
||||
*
|
||||
* Extends NF_Notices to check for 20 or more fields in a single form and if multi-part forms is not installed before throwing an admin notice.
|
||||
*
|
||||
* @since 2.9
|
||||
*/
|
||||
|
||||
class NF_Notices_MP extends NF_Notices
|
||||
{
|
||||
// Basic actions to run
|
||||
public function __construct(){
|
||||
|
||||
// Runs the admin notice ignore function incase a dismiss button has been clicked
|
||||
add_action( 'admin_init', array( $this, 'admin_notice_ignore' ) );
|
||||
|
||||
// Runs the visibility checks for admin notices after all needed core files are loaded
|
||||
add_filter( 'nf_admin_notices', array( $this, 'special_parameters' ) );
|
||||
|
||||
}
|
||||
|
||||
// Function to do all the special checks before running the notice
|
||||
public function special_parameters( $admin_notices ){
|
||||
|
||||
// Check if on builder
|
||||
if ( ! $this->admin_notice_pages( array( array( 'ninja-forms', 'builder' ) ) ) ) {
|
||||
return $admin_notices;
|
||||
}
|
||||
|
||||
// Check for 20 fields in one form
|
||||
$field_check = 0;
|
||||
$all_fields = ninja_forms_get_all_fields();
|
||||
|
||||
if ( is_array( $all_fields ) ) {
|
||||
$count = array();
|
||||
|
||||
foreach ( $all_fields as $key => $val ) {
|
||||
$form_id = $all_fields[ $key ][ 'form_id' ];
|
||||
if ( ! isset( $count[ $form_id ] ) ) {
|
||||
$count[ $form_id ] = 1;
|
||||
} else {
|
||||
$count[ $form_id ]++;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $count as $form_id => $field_count ) {
|
||||
if ( $field_count >=20 ) {
|
||||
$field_check = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check for multi-part forms installed and if the above passes
|
||||
if ( ! is_plugin_active( 'ninja-forms-multi-part/multi-part.php' ) && $field_check == 1 ) {
|
||||
// Add notice
|
||||
$tags = '?utm_medium=plugin&utm_source=admin-notice&utm_campaign=Ninja+Forms+Upsell&utm_content=Mult-Part+Forms';
|
||||
$multi_part_ignore = add_query_arg( array( 'nf_admin_notice_ignore' => 'multi_part' ) );
|
||||
$multi_part_temp = add_query_arg( array( 'nf_admin_notice_temp_ignore' => 'multi_part', 'int' => 14) );
|
||||
$admin_notices['multi_part'] = array(
|
||||
'title' => __( 'Increase Conversions', 'ninja-forms' ),
|
||||
'msg' => __( 'Did you know that you can increase form conversion by breaking larger forms into smaller, more easily digested parts?<p>The Multi-Part Forms extension for Ninja Forms makes this quick and easy.</p>', 'ninja-forms' ),
|
||||
'link' => '<li> <span class="dashicons dashicons-external"></span><a target="_blank" href="https://ninjaforms.com/extensions/multi-part-forms/' . $tags . '"> ' . __( 'Learn More About Multi-Part Forms', 'ninja-forms' ) . '</a></li>
|
||||
<li><span class="dashicons dashicons-calendar-alt"></span><a href="' . $multi_part_temp . '">' . __( 'Maybe Later' ,'ninja-forms' ) . '</a></li>
|
||||
<li><span class="dashicons dashicons-dismiss"></span><a href="' . $multi_part_ignore . '">' . __( 'Dismiss', 'ninja-forms' ) . '</a></li>',
|
||||
'int' => 0
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return $admin_notices;
|
||||
|
||||
}
|
||||
|
||||
// Ignore function that gets ran at admin init to ensure any messages that were dismissed get marked
|
||||
public function admin_notice_ignore() {
|
||||
|
||||
$slug = ( isset( $_GET[ 'nf_admin_notice_ignore' ] ) ) ? sanitize_text_field($_GET[ 'nf_admin_notice_ignore' ]) : '';
|
||||
// If user clicks to ignore the notice, run this action
|
||||
if ( $slug == 'multi-part19' && current_user_can( apply_filters( 'ninja_forms_admin_parent_menu_capabilities', 'manage_options' ) ) ) {
|
||||
|
||||
$admin_notices_extra_option = get_option( 'nf_admin_notice_extra', array() );
|
||||
$admin_notices_extra_option[ sanitize_text_field($_GET[ 'nf_admin_notice_ignore' ]) ][ 'test19' ] = 1;
|
||||
update_option( 'nf_admin_notice_extra', $admin_notices_extra_option );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new NF_Notices_MP();
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
/**
|
||||
* NF_Notices_SP Class
|
||||
*
|
||||
* Extends NF_Notices to check for 40 or more fields in a single form and if multi-part forms is not installed before throwing an admin notice.
|
||||
*
|
||||
* @since 2.9
|
||||
*/
|
||||
|
||||
class NF_Notices_SP extends NF_Notices
|
||||
{
|
||||
// Basic actions to run
|
||||
public function __construct(){
|
||||
|
||||
// Runs the admin notice ignore function incase a dismiss button has been clicked
|
||||
add_action( 'admin_init', array( $this, 'admin_notice_ignore' ) );
|
||||
|
||||
// Runs the visibility checks for admin notices after all needed core files are loaded
|
||||
add_filter( 'nf_admin_notices', array( $this, 'special_parameters' ) );
|
||||
|
||||
}
|
||||
|
||||
// Function to do all the special checks before running the notice
|
||||
public function special_parameters( $admin_notices ){
|
||||
|
||||
// Check if on builder
|
||||
if ( ! $this->admin_notice_pages( array( array( 'ninja-forms', 'builder' ) ) ) ) {
|
||||
return $admin_notices;
|
||||
}
|
||||
|
||||
// Check for 20 fields in one form
|
||||
$field_check = 0;
|
||||
$all_fields = ninja_forms_get_all_fields();
|
||||
|
||||
if ( is_array( $all_fields ) ) {
|
||||
$count = array();
|
||||
|
||||
foreach ( $all_fields as $key => $val ) {
|
||||
$form_id = $all_fields[ $key ][ 'form_id' ];
|
||||
if ( ! isset( $count[ $form_id ] ) ) {
|
||||
$count[ $form_id ] = 1;
|
||||
} else {
|
||||
$count[ $form_id ]++;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $count as $form_id => $field_count ) {
|
||||
if ( $field_count >=40 ) {
|
||||
$field_check = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check for multi-part forms installed and if the above passes
|
||||
if ( ! is_plugin_active( 'ninja-forms-save-progress/save-progress.php' ) && $field_check == 1 ) {
|
||||
// Add notice
|
||||
$tags = '?utm_medium=plugin&utm_source=admin-notice&utm_campaign=Ninja+Forms+Upsell&utm_content=Save+Progress';
|
||||
$save_progress_ignore = add_query_arg( array( 'nf_admin_notice_ignore' => 'save_progress' ) );
|
||||
$save_progress_temp = add_query_arg( array( 'nf_admin_notice_temp_ignore' => 'save_progress', 'int' => 14) );
|
||||
$admin_notices['save_progress'] = array(
|
||||
'title' => __( 'Increase Conversions', 'ninja-forms' ),
|
||||
'msg' => __( 'Users are more likely to complete long forms when they can save and return to complete their submission later.<p>The Save Progress extension for Ninja Forms makes this quick and easy.</p>', 'ninja-forms' ),
|
||||
'link' => '<li> <span class="dashicons dashicons-external"></span><a target="_blank" href="https://ninjaforms.com/extensions/save-user-progress/' . $tags . '"> ' . __( 'Learn More About Save Progress', 'ninja-forms' ) . '</a></li>
|
||||
<li><span class="dashicons dashicons-calendar-alt"></span><a href="' . $save_progress_temp . '">' . __( 'Maybe Later' ,'ninja-forms' ) . '</a></li>
|
||||
<li><span class="dashicons dashicons-dismiss"></span><a href="' . $save_progress_ignore . '">' . __( 'Dismiss', 'ninja-forms' ) . '</a></li>',
|
||||
'int' => 0
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return $admin_notices;
|
||||
|
||||
}
|
||||
// Ignore function that gets ran at admin init to ensure any messages that were dismissed get marked
|
||||
public function admin_notice_ignore() {
|
||||
|
||||
$slug = ( isset( $_GET[ 'nf_admin_notice_ignore' ] ) ) ? sanitize_text_field($_GET[ 'nf_admin_notice_ignore' ]) : '';
|
||||
// If user clicks to ignore the notice, run this action
|
||||
if ( $slug == 'multi-part19' && current_user_can( apply_filters( 'ninja_forms_admin_parent_menu_capabilities', 'manage_options' ) ) ) {
|
||||
|
||||
$admin_notices_extra_option = get_option( 'nf_admin_notice_extra', array() );
|
||||
$admin_notices_extra_option[ sanitize_text_field($_GET[ 'nf_admin_notice_ignore' ]) ][ 'test19' ] = 1;
|
||||
update_option( 'nf_admin_notice_extra', $admin_notices_extra_option );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new NF_Notices_SP();
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Class for notification types.
|
||||
* This is the parent class. it should be extended by specific notification types
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Notifications
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.8
|
||||
*/
|
||||
|
||||
abstract class NF_Notification_Base_Type
|
||||
{
|
||||
|
||||
/**
|
||||
* Get things rolling
|
||||
*
|
||||
* @since 2.8
|
||||
*/
|
||||
function __construct() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Processing function
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return false
|
||||
*/
|
||||
public function process( $id ) {
|
||||
// This space left intentionally blank
|
||||
}
|
||||
|
||||
/**
|
||||
* Output admin edit screen
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return false
|
||||
*/
|
||||
public function edit_screen( $id = '' ) {
|
||||
// This space left intentionally blank
|
||||
}
|
||||
|
||||
/**
|
||||
* Save admin edit screen
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function save_admin( $id = '', $data ) {
|
||||
// This space left intentionally blank
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Explode our settings by ` and extract each value.
|
||||
* Check to see if the setting is a field; if it is, assign the value.
|
||||
* Run shortcodes and return the result.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return array $setting
|
||||
*/
|
||||
public function process_setting( $id, $setting, $html = 1 ) {
|
||||
global $ninja_forms_processing;
|
||||
|
||||
$setting_name = $setting;
|
||||
|
||||
$setting = explode( '`', Ninja_Forms()->notification( $id )->get_setting( $setting ) );
|
||||
|
||||
for ( $x = 0; $x <= count ( $setting ) - 1; $x++ ) {
|
||||
if ( strpos( $setting[ $x ], 'field_' ) !== false ) {
|
||||
if ( $ninja_forms_processing->get_field_value( str_replace( 'field_', '', $setting[ $x ] ) ) ) {
|
||||
$setting[ $x ] = $ninja_forms_processing->get_field_value( str_replace( 'field_', '', $setting[ $x ] ) );
|
||||
} else {
|
||||
$setting[ $x ] = '';
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! is_array ( $setting[ $x] ) ) {
|
||||
$setting[ $x ] = str_replace( '[ninja_forms_all_fields]', '[ninja_forms_all_fields html=' . $html . ']', $setting[ $x ] );
|
||||
$setting[ $x ] = do_shortcode( $setting[ $x ] );
|
||||
$setting[ $x ] = nf_parse_fields_shortcode( $setting[ $x ] );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return apply_filters( 'nf_notification_process_setting', $setting, $setting_name, $id );
|
||||
}
|
||||
}
|
||||
|
|
@ -1,413 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Class for our email notification type.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Notifications
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.8
|
||||
*/
|
||||
|
||||
class NF_Notification_Email extends NF_Notification_Base_Type
|
||||
{
|
||||
|
||||
/**
|
||||
* Get things rolling
|
||||
*/
|
||||
function __construct() {
|
||||
$this->name = __( 'Email', 'ninja-forms' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our edit screen
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function edit_screen( $id = '' ) {
|
||||
$form_id = ( '' != $id ) ? Ninja_Forms()->notification( $id )->form_id : '';
|
||||
|
||||
if ( $id == '' ) {
|
||||
$email_format = 'html';
|
||||
$from_name = get_bloginfo( 'name' );
|
||||
$from_address = get_bloginfo( 'admin_email' );
|
||||
$reply_to = '';
|
||||
$to = '';
|
||||
$cc = '';
|
||||
$bcc = '';
|
||||
$email_subject = '';
|
||||
$email_message = '';
|
||||
} else {
|
||||
$email_format = Ninja_Forms()->notification( $id )->get_setting( 'email_format' );
|
||||
$from_name = Ninja_Forms()->notification( $id )->get_setting( 'from_name' );
|
||||
$from_address = Ninja_Forms()->notification( $id )->get_setting( 'from_address' );
|
||||
$reply_to = Ninja_Forms()->notification( $id )->get_setting( 'reply_to' );
|
||||
$to = Ninja_Forms()->notification( $id )->get_setting( 'to' );
|
||||
$cc = Ninja_Forms()->notification( $id )->get_setting( 'cc' );
|
||||
$bcc = Ninja_Forms()->notification( $id )->get_setting( 'bcc' );
|
||||
$email_subject = Ninja_Forms()->notification( $id )->get_setting( 'email_subject' );
|
||||
$email_message = Ninja_Forms()->notification( $id )->get_setting( 'email_message' );
|
||||
}
|
||||
|
||||
?>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-from_name"><?php _e( 'From Name', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[from_name]" type="text" id="settings-from_name" value="<?php echo $from_name; ?>" class="nf-tokenize" placeholder="<?php _e( 'Name or fields', 'ninja-forms' ); ?>" data-token-limit="0" data-key="from_name" data-type="all" />
|
||||
<span class="howto"><?php _e( 'Email will appear to be from this name.', 'ninja-forms' ) ?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-from_address"><?php _e( 'From Address', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[from_address]" type="text" id="settings-from_address" value="<?php echo $from_address; ?>" class="nf-tokenize" placeholder="<?php _e( 'One email address or field', 'ninja-forms' ); ?>" data-token-limit="1" data-key="from_address" data-type="all" />
|
||||
<span class="howto"><?php _e( 'Email will appear to be from this email address.', 'ninja-forms' ) ?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-to"><?php _e( 'To', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[to]" type="text" id="settings-to" value="<?php echo $to; ?>" class="nf-tokenize" placeholder="<?php _e( 'Email addresses or search for a field', 'ninja-forms' ); ?>" data-token-limit="0" data-key="to" data-type="all" />
|
||||
<span class="howto"><?php _e( 'Who should this email be sent to?', 'ninja-forms' ) ?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-email_subject"><?php _e( 'Subject', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[email_subject]" type="text" id="settings-email_subject" value="<?php echo $email_subject; ?>" class="nf-tokenize" placeholder="<?php _e( 'Subject Text or search for a field', 'ninja-forms' ); ?>" data-token-limit="0" data-key="email_subject" data-type="all" />
|
||||
<span class="howto"><?php _e( 'This will be the subject of the email.', 'ninja-forms' ) ?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-email_message"><?php _e( 'Email Message', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<?php
|
||||
$settings = array(
|
||||
'textarea_name' => 'settings[email_message]',
|
||||
);
|
||||
wp_editor( $email_message, 'email_message', $settings );
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-attachments"><?php _e( 'Attachments', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<ul>
|
||||
<?php
|
||||
$attachment_types = apply_filters( 'nf_email_notification_attachment_types',
|
||||
array(
|
||||
'attach_csv' => __( 'Submission CSV', 'ninja-forms' ),
|
||||
)
|
||||
);
|
||||
|
||||
foreach ( $attachment_types as $slug => $nicename ) {
|
||||
if ( '' == $id ) {
|
||||
$current_setting = 0;
|
||||
} else {
|
||||
$current_setting = Ninja_Forms()->notification( $id )->get_setting( $slug );
|
||||
}
|
||||
|
||||
?>
|
||||
<li>
|
||||
<input name="settings[<?php echo $slug; ?>]" type="hidden" value="0">
|
||||
<input name="settings[<?php echo $slug; ?>]" type="checkbox" id="settings-<?php echo $slug; ?>" value="1" <?php checked( $current_setting, 1 ); ?>/>
|
||||
<label for="settings-<?php echo $slug; ?>"><?php echo $nicename; ?></label>
|
||||
</li>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><a href="#" id="toggle_email_advanced"><?php _e( 'Advanced Settings', 'ninja-forms' ); ?></a></th>
|
||||
</tr>
|
||||
<tbody id="email_advanced" style="display:none;">
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-email_format"><?php _e( 'Format', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<select name="settings[email_format]" id="settings-email_format" data-key="email_format"/>
|
||||
<option value="html" <?php selected( $email_format, 'html' ); ?>><?php _e( 'HTML', 'ninja-forms' ); ?></option>
|
||||
<option value="plain" <?php selected( $email_format, 'plain' ); ?>><?php _e( 'Plain Text', 'ninja-forms' ); ?></option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-reply_to"><?php _e( 'Reply To', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[reply_to]" type="text" id="settings-reply_to" value="<?php echo $reply_to; ?>" class="nf-tokenize" placeholder="<?php __( 'One email address or field', 'ninja-forms' ); ?>" data-token-limit="1" data-key="reply_to" data-type="all" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-cc"><?php _e( 'Cc', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[cc]" type="text" id="settings-cc" value="<?php echo $cc; ?>" class="nf-tokenize" placeholder="<?php __( 'Email addresses or search for a field', 'ninja-forms' ); ?>" data-token-limit="0" data-key="cc" data-type="all" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-bcc"><?php _e( 'Bcc', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<input name="settings[bcc]" type="text" id="settings-bcc" value="<?php echo $bcc; ?>" class="nf-tokenize" placeholder="<?php __( 'Email addresses or search for a field', 'ninja-forms' ); ?>" data-token-limit="0" data-key="bcc" data-type="all" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<?php
|
||||
|
||||
do_action( 'nf_email_notification_after_settings', $id );
|
||||
|
||||
if ( '' != $form_id ) {
|
||||
$from_name = $this->get_value( $id, 'from_name', $form_id );
|
||||
$from_address = $this->get_value( $id, 'from_address', $form_id );
|
||||
$reply_to = $this->get_value( $id, 'reply_to', $form_id );
|
||||
$to = $this->get_value( $id, 'to', $form_id );
|
||||
$cc = $this->get_value( $id, 'cc', $form_id );
|
||||
$bcc = $this->get_value( $id, 'bcc', $form_id );
|
||||
$email_subject = $this->get_value( $id, 'email_subject', $form_id );
|
||||
} else {
|
||||
$from_name = get_bloginfo( 'name' );
|
||||
$from_address = get_bloginfo( 'admin_email' );
|
||||
$reply_to = '';
|
||||
$to = '';
|
||||
$cc = '';
|
||||
$bcc = '';
|
||||
$email_subject = '';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
nf_notifications.tokens['from_name'] = <?php echo json_encode( $from_name ); ?>;
|
||||
nf_notifications.tokens['from_address'] = <?php echo json_encode( $from_address ); ?>;
|
||||
nf_notifications.tokens['reply_to'] = <?php echo json_encode( $reply_to ); ?>;
|
||||
nf_notifications.tokens['to'] = <?php echo json_encode( $to ); ?>;
|
||||
nf_notifications.tokens['cc'] = <?php echo json_encode( $cc ); ?>;
|
||||
nf_notifications.tokens['bcc'] = <?php echo json_encode( $bcc ); ?>;
|
||||
nf_notifications.tokens['email_subject'] = <?php echo json_encode( $email_subject ); ?>;
|
||||
</script>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get our input value labels
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return string $label
|
||||
*/
|
||||
public function get_value( $id, $meta_key, $form_id ) {
|
||||
$meta_value = nf_get_object_meta_value( $id, $meta_key );
|
||||
$meta_value = explode( '`', $meta_value );
|
||||
|
||||
$return = array();
|
||||
foreach( $meta_value as $val ) {
|
||||
if ( strpos( $val, 'field_' ) !== false ) {
|
||||
$val = str_replace( 'field_', '', $val );
|
||||
$label = nf_get_field_admin_label( $val, $form_id );
|
||||
if ( strlen( $label ) > 30 ) {
|
||||
$label = substr( $label, 0, 30 );
|
||||
}
|
||||
|
||||
$return[] = array( 'value' => 'field_' . $val, 'label' => $label . ' - ID: ' . $val );
|
||||
} else {
|
||||
$return[] = array( 'value' => $val, 'label' => $val );
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process our Email notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function process( $id ) {
|
||||
global $ninja_forms_processing;
|
||||
|
||||
$form_id = $ninja_forms_processing->get_form_ID();
|
||||
$form_title = $ninja_forms_processing->get_form_setting( 'form_title' );
|
||||
|
||||
$email_format = Ninja_Forms()->notification( $id )->get_setting( 'email_format' );
|
||||
$attach_csv = Ninja_Forms()->notification( $id )->get_setting( 'attach_csv' );
|
||||
|
||||
$from_name = $this->process_setting( $id, 'from_name' );
|
||||
$from_name = implode( ' ', $from_name );
|
||||
|
||||
$from_address = $this->process_setting( $id, 'from_address' );
|
||||
$from_address = $from_address[0];
|
||||
|
||||
$reply_to = $this->process_setting( $id, 'reply_to' );
|
||||
$reply_to = $reply_to[0];
|
||||
$to = $this->process_setting( $id, 'to' );
|
||||
$cc = $this->process_setting( $id, 'cc' );
|
||||
// $cc = $cc[0];
|
||||
$bcc = $this->process_setting( $id, 'bcc' );
|
||||
// $bcc = $bcc[0];
|
||||
|
||||
if ( empty ( $from_name ) )
|
||||
$from_name = 'WordPress';
|
||||
|
||||
if ( empty ( $from_address ) ) {
|
||||
$admin_email = get_bloginfo( 'admin_email' );
|
||||
$from_address = $admin_email;
|
||||
}
|
||||
|
||||
$email_from = $from_name.' <'.$from_address.'>';
|
||||
|
||||
$subject = $this->process_setting( $id, 'email_subject' );
|
||||
$subject = $this->flatten_array_recursive( ' ', $subject );
|
||||
|
||||
if ( empty( $subject ) ) {
|
||||
$subject = $form_title;
|
||||
} elseif( is_array( $subject ) ){
|
||||
$subject = implode( ',', $subject );
|
||||
}
|
||||
|
||||
$message = $this->process_setting( $id, 'email_message' );
|
||||
if ( is_array ( $message ) )
|
||||
$message = $message[0];
|
||||
|
||||
if ( $email_format != 'plain' )
|
||||
$message = apply_filters( 'ninja_forms_admin_email_message_wpautop', wpautop( $message ) );
|
||||
|
||||
if ( empty ( $message ) )
|
||||
$message = ' ';
|
||||
|
||||
$headers = array();
|
||||
$headers[] = 'From: ' . $email_from;
|
||||
|
||||
if( ! empty( $reply_to ) ) {
|
||||
$headers[] = sprintf('Reply-To: "%s" <%s>', $from_name, $reply_to);
|
||||
}
|
||||
$headers[] = 'Content-Type: text/' . $email_format;
|
||||
$headers[] = 'charset=utf-8';
|
||||
|
||||
if ( ! empty( $cc ) ) {
|
||||
foreach ($cc as $ccemail) {
|
||||
if ( ! empty( $ccemail ) ) {
|
||||
$headers[] = 'Cc: ' . $ccemail;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $bcc ) ) {
|
||||
foreach ($bcc as $bccemail) {
|
||||
if ( ! empty( $bccemail ) ) {
|
||||
$headers[] = 'Bcc: ' . $bccemail;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$csv_attachment = '';
|
||||
$attachments = apply_filters( 'nf_email_notification_attachments', array(), $id );
|
||||
|
||||
// Check to see if we need to attach a CSV
|
||||
if ( 1 == $attach_csv ) {
|
||||
// Create our attachment
|
||||
|
||||
// Get our submission ID
|
||||
$sub_id = $ninja_forms_processing->get_form_setting( 'sub_id' );
|
||||
|
||||
// create CSV content
|
||||
$csv_content = Ninja_Forms()->sub( $sub_id )->export( true );
|
||||
|
||||
$upload_dir = wp_upload_dir();
|
||||
$path = trailingslashit( $upload_dir['path'] );
|
||||
|
||||
// create temporary file
|
||||
$path = tempnam( $path, 'Sub' );
|
||||
$temp_file = fopen( $path, 'r+' );
|
||||
|
||||
// write to temp file
|
||||
fwrite( $temp_file, $csv_content );
|
||||
fclose( $temp_file );
|
||||
|
||||
// find the directory we will be using for the final file
|
||||
$path = pathinfo( $path );
|
||||
$dir = $path['dirname'];
|
||||
$basename = $path['basename'];
|
||||
|
||||
// create name for file
|
||||
$new_name = apply_filters( 'ninja_forms_submission_csv_name', 'ninja-forms-submission' );
|
||||
|
||||
// remove a file if it already exists
|
||||
if( file_exists( $dir.'/'.$new_name.'.csv' ) ) {
|
||||
unlink( $dir.'/'.$new_name.'.csv' );
|
||||
}
|
||||
|
||||
// move file
|
||||
rename( $dir.'/'.$basename, $dir.'/'.$new_name.'.csv' );
|
||||
$csv_attachment = $dir.'/'.$new_name.'.csv';
|
||||
|
||||
$attachments[] = $csv_attachment;
|
||||
}
|
||||
|
||||
if ( is_array( $to ) AND !empty( $to ) ){
|
||||
|
||||
$to = explode( ",", $this->flatten_array_recursive( ',', $to ) );
|
||||
|
||||
wp_mail( $to, $subject, $message, $headers, $attachments );
|
||||
}
|
||||
|
||||
// Delete our admin CSV if one is present.
|
||||
if ( file_exists( $csv_attachment ) ) {
|
||||
//unlink ( $csv_attachment );
|
||||
}
|
||||
}
|
||||
|
||||
public function flatten_array_recursive( $glue = ',', array $array = array() ) {
|
||||
|
||||
$return = array();
|
||||
|
||||
foreach ( $array as $value ) {
|
||||
|
||||
if ( is_array( $value ) ) {
|
||||
|
||||
$return[] = $this->flatten_array_recursive( $glue, $value );
|
||||
|
||||
} else {
|
||||
|
||||
$return[] = $value;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return implode( $glue, $return );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Explode our settings by ` and extract each value.
|
||||
* Check to see if the setting is a field; if it is, assign the value.
|
||||
* Run shortcodes and return the result.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return array $setting
|
||||
*/
|
||||
public function process_setting( $id, $setting, $html = 0 ) {
|
||||
|
||||
// save the setting name
|
||||
$setting_name = $setting;
|
||||
|
||||
$format = Ninja_Forms()->notification( $id )->get_setting( 'email_format' );
|
||||
if ( 'html' == $format )
|
||||
$html = 1;
|
||||
|
||||
// call parent process setting method
|
||||
$setting = parent::process_setting( $id, $setting, $html );
|
||||
|
||||
// gotta keep the old filter in case anyone was using it.
|
||||
return apply_filters( 'nf_email_notification_process_setting', $setting, $setting_name, $id );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new NF_Notification_Email();
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Class for our redirect notification type.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Notifications
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.8
|
||||
*/
|
||||
|
||||
class NF_Notification_Redirect extends NF_Notification_Base_Type
|
||||
{
|
||||
|
||||
/**
|
||||
* Get things rolling
|
||||
*/
|
||||
function __construct() {
|
||||
$this->name = __( 'Redirect', 'ninja-forms' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our edit screen
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function edit_screen( $id = '' ) {
|
||||
$redirect_url = trim( Ninja_Forms()->notification( $id )->get_setting( 'redirect_url' ) );
|
||||
?>
|
||||
<tr>
|
||||
<th scope="row"><label for="settings-redirect_url"><?php _e( 'Url', 'ninja-forms' ); ?></label></th>
|
||||
<td><input type="text" name="settings[redirect_url]" id="settings-redirect_url" value="<?php echo esc_attr( $redirect_url ); ?>" class="regular-text"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Process our Redirect notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function process( $id ) {
|
||||
global $ninja_forms_processing;
|
||||
|
||||
$redirect_url = trim( Ninja_Forms()->notification( $id )->get_setting( 'redirect_url' ) );
|
||||
|
||||
$ninja_forms_processing->update_form_setting( 'landing_page', $redirect_url );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new NF_Notification_Redirect();
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Class for our success message notification type.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Notifications
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.8
|
||||
*/
|
||||
|
||||
class NF_Notification_Success_Message extends NF_Notification_Base_Type
|
||||
{
|
||||
|
||||
/**
|
||||
* Get things rolling
|
||||
*/
|
||||
function __construct() {
|
||||
$this->name = __( 'Success Message', 'ninja-forms' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our edit screen
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function edit_screen( $id = '' ) {
|
||||
$settings = array(
|
||||
'textarea_name' => 'settings[success_msg]',
|
||||
);
|
||||
$loc_opts = apply_filters( 'nf_success_message_locations',
|
||||
array(
|
||||
array( 'action' => 'ninja_forms_display_before_fields', 'name' => __( 'Before Form', 'ninja-forms' ) ),
|
||||
array( 'action' => 'ninja_forms_display_after_fields', 'name' => __( 'After Form', 'ninja-forms' ) ),
|
||||
)
|
||||
);
|
||||
?>
|
||||
<!-- <tr>
|
||||
<th scope="row"><label for="success_message_loc"><?php _e( 'Location', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<select name="settings[success_message_loc]">
|
||||
<?php
|
||||
foreach ( $loc_opts as $opt ) {
|
||||
?>
|
||||
<option value="<?php echo $opt['action'];?>" <?php selected( nf_get_object_meta_value( $id, 'success_message_loc' ), $opt['action'] ); ?>><?php echo $opt['name'];?></option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr> -->
|
||||
<tr>
|
||||
<th scope="row"><label for="success_msg"><?php _e( 'Message', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<?php wp_editor( nf_get_object_meta_value( $id, 'success_msg' ), 'success_msg', $settings ); ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Process our Success Message notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function process( $id ) {
|
||||
global $ninja_forms_processing;
|
||||
|
||||
// We need to get our name setting so that we can use it to create a unique success message ID.
|
||||
$name = Ninja_Forms()->notification( $id )->get_setting( 'name' );
|
||||
// If our name is empty, we need to generate a random string.
|
||||
if ( empty ( $name ) ) {
|
||||
$name = ninja_forms_random_string( 4 );
|
||||
}
|
||||
$success_msg = apply_filters( 'nf_success_msg', Ninja_Forms()->notification( $id )->get_setting( 'success_msg' ), $id );
|
||||
$success_msg = do_shortcode( wpautop( $success_msg ) );
|
||||
$success_msg = nf_parse_fields_shortcode( $success_msg );
|
||||
$ninja_forms_processing->add_success_msg( 'success_msg-' . $name, $success_msg );
|
||||
}
|
||||
}
|
||||
|
||||
return new NF_Notification_Success_Message();
|
||||
|
|
@ -1,170 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Notification
|
||||
*
|
||||
* Single notification object.
|
||||
* This object lets us call it like: Ninja_Forms()->notification( 33 )->methods()
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Notifications
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.8
|
||||
*/
|
||||
|
||||
class NF_Notification
|
||||
{
|
||||
|
||||
/**
|
||||
* @var notification id
|
||||
*/
|
||||
var $id = '';
|
||||
|
||||
/**
|
||||
* @var type
|
||||
*/
|
||||
var $type = '';
|
||||
|
||||
/**
|
||||
* @var active
|
||||
* Holds a boolean value.
|
||||
*/
|
||||
var $active = '';
|
||||
|
||||
/**
|
||||
* @var form_id
|
||||
* Holds the id of our form.
|
||||
*/
|
||||
var $form_id = '';
|
||||
|
||||
|
||||
/**
|
||||
* Get things rolling
|
||||
*
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
function __construct( $id ) {
|
||||
$this->id = $id;
|
||||
$this->type = nf_get_object_meta_value( $id, 'type' );
|
||||
$this->active = ( nf_get_object_meta_value( $id, 'active' ) == 1 ) ? true : false;
|
||||
$this->form_id = nf_get_object_parent( $id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Ouptut our admin screen
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function edit_screen() {
|
||||
$type = $this->type;
|
||||
// Call our type edit screen.
|
||||
Ninja_Forms()->notification_types[ $type ]->edit_screen( $this->id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete our notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function delete() {
|
||||
nf_delete_notification( $this->id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate our notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function activate() {
|
||||
nf_update_object_meta( $this->id, 'active', 1 );
|
||||
$this->active = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deactivate our notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function deactivate() {
|
||||
nf_update_object_meta( $this->id, 'active', 0 );
|
||||
$this->active = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate our notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return int $n_id
|
||||
*/
|
||||
public function duplicate() {
|
||||
$n_id = Ninja_Forms()->notifications->create( $this->form_id );
|
||||
$meta = nf_get_notification_by_id( $this->id );
|
||||
foreach ( $meta as $meta_key => $meta_value ) {
|
||||
nf_update_object_meta( $n_id, $meta_key, $meta_value );
|
||||
}
|
||||
|
||||
$name = nf_get_object_meta_value( $n_id, 'name' ) . ' - ' . __( 'duplicate', 'ninja-forms' );
|
||||
nf_update_object_meta( $n_id, 'name', $name );
|
||||
}
|
||||
|
||||
/**
|
||||
* Run our notification processing function
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function process() {
|
||||
$type = $this->type;
|
||||
if ( isset ( Ninja_Forms()->notification_types[ $type ] ) && is_object( Ninja_Forms()->notification_types[ $type ] ) ) {
|
||||
Ninja_Forms()->notification_types[ $type ]->process( $this->id );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a notification setting
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return string $meta_value
|
||||
*/
|
||||
public function get_setting( $meta_key ) {
|
||||
return nf_get_object_meta_value( $this->id, $meta_key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a notification setting
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return bool
|
||||
*/
|
||||
public function update_setting( $meta_key, $meta_value ) {
|
||||
nf_update_object_meta( $this->id, $meta_key, $meta_value );
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get our notification type name
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return string $name
|
||||
*/
|
||||
public function type_name() {
|
||||
$type = $this->type;
|
||||
// Call our type edit screen.
|
||||
return Ninja_Forms()->notification_types[ $type ]->name;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,427 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
/*************************** LOAD THE BASE CLASS *******************************
|
||||
*******************************************************************************
|
||||
* The WP_List_Table class isn't automatically available to plugins, so we need
|
||||
* to check if it's available and load it if necessary. In this tutorial, we are
|
||||
* going to use the WP_List_Table class directly from WordPress core.
|
||||
*
|
||||
* IMPORTANT:
|
||||
* Please note that the WP_List_Table class technically isn't an official API,
|
||||
* and it could change at some point in the distant future. Should that happen,
|
||||
* I will update this plugin with the most current techniques for your reference
|
||||
* immediately.
|
||||
*
|
||||
* If you are really worried about future compatibility, you can make a copy of
|
||||
* the WP_List_Table class (file path is shown just below) to use and distribute
|
||||
* with your plugins. If you do that, just remember to change the name of the
|
||||
* class to avoid conflicts with core.
|
||||
*
|
||||
* Since I will be keeping this tutorial up-to-date for the foreseeable future,
|
||||
* I am going to work with the copy of the class provided in WordPress core.
|
||||
*/
|
||||
if( ! class_exists( 'WP_List_Table' ) ) {
|
||||
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
|
||||
}
|
||||
|
||||
/************************** CREATE A PACKAGE CLASS *****************************
|
||||
*******************************************************************************
|
||||
* Create a new list table package that extends the core WP_List_Table class.
|
||||
* WP_List_Table contains most of the framework for generating the table, but we
|
||||
* need to define and override some methods so that our data can be displayed
|
||||
* exactly the way we need it to be.
|
||||
*
|
||||
* To display this example on a page, you will first need to instantiate the class,
|
||||
* then call $yourInstance->prepare_items() to handle any data manipulation, then
|
||||
* finally call $yourInstance->display() to render the table to the page.
|
||||
*
|
||||
* Our theme for this list table is going to be movies.
|
||||
*/
|
||||
class NF_Notifications_List_Table extends WP_List_Table {
|
||||
|
||||
/**
|
||||
* @var form_id
|
||||
*/
|
||||
var $form_id = '';
|
||||
|
||||
/** ************************************************************************
|
||||
* REQUIRED. Set up a constructor that references the parent constructor. We
|
||||
* use the parent reference to set some default configs.
|
||||
***************************************************************************/
|
||||
function __construct(){
|
||||
global $status, $page;
|
||||
|
||||
//Set parent defaults
|
||||
parent::__construct( array(
|
||||
'singular' => 'notification', //singular name of the listed records
|
||||
'plural' => 'notifications', //plural name of the listed records
|
||||
'ajax' => false //does this table support ajax?
|
||||
) );
|
||||
|
||||
$this->form_id = isset ( $_REQUEST['form_id'] ) ? absint( $_REQUEST['form_id'] ) : '';
|
||||
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* Recommended. This method is called when the parent class can't find a method
|
||||
* specifically build for a given column. Generally, it's recommended to include
|
||||
* one method for each column you want to render, keeping your package class
|
||||
* neat and organized. For example, if the class needs to process a column
|
||||
* named 'title', it would first see if a method named $this->column_title()
|
||||
* exists - if it does, that method will be used. If it doesn't, this one will
|
||||
* be used. Generally, you should try to use custom column methods as much as
|
||||
* possible.
|
||||
*
|
||||
* Since we have defined a column_title() method later on, this method doesn't
|
||||
* need to concern itself with any column with a name of 'title'. Instead, it
|
||||
* needs to handle everything else.
|
||||
*
|
||||
* For more detailed insight into how columns are handled, take a look at
|
||||
* WP_List_Table::single_row_columns()
|
||||
*
|
||||
* @param array $item A singular item (one full row's worth of data)
|
||||
* @param array $column_name The name/slug of the column to be processed
|
||||
* @return string Text or HTML to be placed inside the column <td>
|
||||
**************************************************************************/
|
||||
public function column_default($item, $column_name){
|
||||
switch($column_name){
|
||||
case 'type':
|
||||
return Ninja_Forms()->notification( $item['id'] )->type_name();
|
||||
case 'date_updated':
|
||||
return $item[$column_name];
|
||||
default:
|
||||
return print_r($item,true); //Show the whole array for troubleshooting purposes
|
||||
}
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* Recommended. This is a custom column method and is responsible for what
|
||||
* is rendered in any column with a name/slug of 'title'. Every time the class
|
||||
* needs to render a column, it first looks for a method named
|
||||
* column_{$column_title} - if it exists, that method is run. If it doesn't
|
||||
* exist, column_default() is called instead.
|
||||
*
|
||||
* This example also illustrates how to implement rollover actions. Actions
|
||||
* should be an associative array formatted as 'slug'=>'link html' - and you
|
||||
* will need to generate the URLs yourself. You could even ensure the links
|
||||
*
|
||||
*
|
||||
* @see WP_List_Table::::single_row_columns()
|
||||
* @param array $item A singular item (one full row's worth of data)
|
||||
* @return string Text to be placed inside the column <td> (movie title only)
|
||||
**************************************************************************/
|
||||
public function column_name( $item ){
|
||||
|
||||
$base_url = esc_url_raw( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ) ) );
|
||||
|
||||
$activate_text = ( Ninja_Forms()->notification( $item['id'] )->active ) ? __( 'Deactivate', 'ninja-forms' ) : __( 'Activate', 'ninja-forms' );
|
||||
|
||||
$activate_action = ( Ninja_Forms()->notification( $item['id'] )->active ) ? 'deactivate' : 'activate';
|
||||
|
||||
$activate_url = esc_url( add_query_arg( array( 'notification-action' => $activate_action, 'id' => $item['id'] ), $base_url ) );
|
||||
$edit_url = esc_url( add_query_arg( array( 'notification-action' => 'edit', 'id' => $item['id'] ), $base_url ) );
|
||||
$delete_url = esc_url( add_query_arg( array( 'action' => 'delete' ), $base_url ) );
|
||||
$duplicate_url = esc_url( add_query_arg( array( 'notification-action' => 'duplicate', 'id' => $item['id'] ), $base_url ) );
|
||||
|
||||
//Build row actions
|
||||
$actions = array(
|
||||
'active' => '<a href="' . $activate_url . '" class="notification-activate" data-action="' . $activate_action . '" data-n_id="' . $item['id'] . '">' . $activate_text . '</a>',
|
||||
'edit' => '<a href="' . $edit_url . '">' . __( 'Edit', 'ninja-forms' ) . '</a>',
|
||||
'delete' => '<a href="' . $delete_url .'" class="notification-delete" data-n_id="' . $item['id'] . '">' . __( 'Delete', 'ninja-forms' ) . '</a>',
|
||||
'duplicate' => '<a href="' . $duplicate_url .'">' . __( 'Duplicate', 'ninja-forms' ) . '</a>',
|
||||
);
|
||||
|
||||
//Return the title contents
|
||||
return sprintf( '<a href="%1$s">%2$s</a> %3$s',
|
||||
/*$1%s*/ $edit_url,
|
||||
/*$2%s*/ $item['name'],
|
||||
/*$3%s*/ $this->row_actions($actions)
|
||||
);
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* REQUIRED if displaying checkboxes or using bulk actions! The 'cb' column
|
||||
* is given special treatment when columns are processed. It ALWAYS needs to
|
||||
* have it's own method.
|
||||
*
|
||||
* @see WP_List_Table::::single_row_columns()
|
||||
* @param array $item A singular item (one full row's worth of data)
|
||||
* @return string Text to be placed inside the column <td> (movie title only)
|
||||
**************************************************************************/
|
||||
public function column_cb($item){
|
||||
return sprintf(
|
||||
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
||||
/*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie")
|
||||
/*$2%s*/ $item['id'] //The value of the checkbox should be the record's id
|
||||
);
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* REQUIRED! This method dictates the table's columns and titles. This should
|
||||
* return an array where the key is the column slug (and class) and the value
|
||||
* is the column's title text. If you need a checkbox for bulk actions, refer
|
||||
* to the $columns array below.
|
||||
*
|
||||
* The 'cb' column is treated differently than the rest. If including a checkbox
|
||||
* column in your table you must create a column_cb() method. If you don't need
|
||||
* bulk actions or checkboxes, simply leave the 'cb' entry out of your array.
|
||||
*
|
||||
* @see WP_List_Table::::single_row_columns()
|
||||
* @return array An associative array containing column information: 'slugs'=>'Visible Titles'
|
||||
**************************************************************************/
|
||||
public function get_columns(){
|
||||
$columns = array(
|
||||
'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
|
||||
'name' => __( 'Name', 'ninja-forms' ),
|
||||
'type' => __( 'Type', 'ninja-forms' ),
|
||||
'date_updated' => __( 'Date Updated', 'ninja-forms' ),
|
||||
);
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* Optional. If you want one or more columns to be sortable (ASC/DESC toggle),
|
||||
* you will need to register it here. This should return an array where the
|
||||
* key is the column that needs to be sortable, and the value is db column to
|
||||
* sort by. Often, the key and value will be the same, but this is not always
|
||||
* the case (as the value is a column name from the database, not the list table).
|
||||
*
|
||||
* This method merely defines which columns should be sortable and makes them
|
||||
* clickable - it does not handle the actual sorting. You still need to detect
|
||||
* the ORDERBY and ORDER querystring variables within prepare_items() and sort
|
||||
* your data accordingly (usually by modifying your query).
|
||||
*
|
||||
* @return array An associative array containing all the columns that should be sortable: 'slugs'=>array('data_values',bool)
|
||||
**************************************************************************/
|
||||
public function get_sortable_columns() {
|
||||
$sortable_columns = array(
|
||||
'name' => array( 'name',false ), //true means it's already sorted
|
||||
'type' => array( 'type',false ),
|
||||
'date_updated' => array( 'date_updated',false )
|
||||
);
|
||||
return $sortable_columns;
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* Optional. If you need to include bulk actions in your list table, this is
|
||||
* the place to define them. Bulk actions are an associative array in the format
|
||||
* 'slug'=>'Visible Title'
|
||||
*
|
||||
* If this method returns an empty value, no bulk action will be rendered. If
|
||||
* you specify any bulk actions, the bulk actions box will be rendered with
|
||||
* the table automatically on display().
|
||||
*
|
||||
* Also note that list tables are not automatically wrapped in <form> elements,
|
||||
* so you will need to create those manually in order for bulk actions to function.
|
||||
*
|
||||
* @return array An associative array containing all the bulk actions: 'slugs'=>'Visible Titles'
|
||||
**************************************************************************/
|
||||
public function get_bulk_actions() {
|
||||
$actions = array(
|
||||
'activate' => __( 'Activate', 'ninja-forms' ),
|
||||
'deactivate' => __( 'Deactivate', 'ninja-forms' ),
|
||||
'delete' => __( 'Delete', 'ninja-forms' ),
|
||||
);
|
||||
return $actions;
|
||||
}
|
||||
|
||||
public function extra_tablenav( $which ) {
|
||||
if ( $which == 'bottom' )
|
||||
return false;
|
||||
|
||||
if ( isset ( $_REQUEST['type'] ) ) {
|
||||
$type = esc_html( $_REQUEST['type'] );
|
||||
} else {
|
||||
$type = '';
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="alignleft actions">
|
||||
<select name="type" id="filter-type">
|
||||
<option value="" <?php selected( $type, '' ); ?>><?php _e( '- View All Types', 'ninja-forms' ); ?></option>
|
||||
<?php
|
||||
foreach ( Ninja_Forms()->notifications->get_types() as $slug => $nicename ) {
|
||||
?>
|
||||
<option value="<?php echo $slug; ?>" <?php selected( $type, $slug ); ?>><?php echo $nicename; ?></option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<span class="nf-more-actions"><a href="<?php echo nf_aff_link( 'https://ninjaforms.com/extensions/?display=actions&utm_medium=plugin&utm_source=actions-table&utm_campaign=Ninja+Forms+Upsell&utm_content=Ninja+Forms+Actions' ); ?>" target="_blank"><?php _e( 'Get More Types', 'ninja-forms' ); ?> <span class="dashicons dashicons-external"></span></a></span>
|
||||
<span style="float:left;" class="spinner"></span>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates content for a single row of the table
|
||||
*
|
||||
* @since 3.1.0
|
||||
* @access protected
|
||||
*
|
||||
* @param object $item The current item
|
||||
*/
|
||||
function single_row( $item ) {
|
||||
static $alternate = '';
|
||||
|
||||
$active = ( Ninja_Forms()->notification( $item['id'] )->active ) ? 'nf-notification-active ' : 'nf-notification-inactive';
|
||||
$alternate = ( $alternate == '' ? 'alternate' : '' );
|
||||
|
||||
echo '<tr class="' . $active . ' ' . $alternate . '" id="' . $item['id'] . '">';
|
||||
$this->single_row_columns( $item );
|
||||
echo '</tr>';
|
||||
}
|
||||
|
||||
/** ************************************************************************
|
||||
* REQUIRED! This is where you prepare your data for display. This method will
|
||||
* usually be used to query the database, sort and filter the data, and generally
|
||||
* get it ready to be displayed. At a minimum, we should set $this->items and
|
||||
* $this->set_pagination_args(), although the following properties and methods
|
||||
* are frequently interacted with here...
|
||||
*
|
||||
* @global WPDB $wpdb
|
||||
* @uses $this->_column_headers
|
||||
* @uses $this->items
|
||||
* @uses $this->get_columns()
|
||||
* @uses $this->get_sortable_columns()
|
||||
* @uses $this->get_pagenum()
|
||||
* @uses $this->set_pagination_args()
|
||||
**************************************************************************/
|
||||
public function prepare_items() {
|
||||
global $wpdb; //This is used only if making any database queries
|
||||
|
||||
/**
|
||||
* First, lets decide how many records per page to show
|
||||
*/
|
||||
$per_page = 99999;
|
||||
|
||||
|
||||
/**
|
||||
* REQUIRED. Now we need to define our column headers. This includes a complete
|
||||
* array of columns to be displayed (slugs & titles), a list of columns
|
||||
* to keep hidden, and a list of columns that are sortable. Each of these
|
||||
* can be defined in another method (as we've done here) before being
|
||||
* used to build the value for our _column_headers property.
|
||||
*/
|
||||
$columns = $this->get_columns();
|
||||
$hidden = array();
|
||||
$sortable = $this->get_sortable_columns();
|
||||
|
||||
|
||||
/**
|
||||
* REQUIRED. Finally, we build an array to be used by the class for column
|
||||
* headers. The $this->_column_headers property takes an array which contains
|
||||
* 3 other arrays. One for all columns, one for hidden columns, and one
|
||||
* for sortable columns.
|
||||
*/
|
||||
$this->_column_headers = array($columns, $hidden, $sortable);
|
||||
|
||||
|
||||
/**
|
||||
* Optional. You can handle your bulk actions however you see fit. In this
|
||||
* case, we'll handle them within our package just to keep things clean.
|
||||
*/
|
||||
//$this->process_bulk_action();
|
||||
|
||||
|
||||
/**
|
||||
* Instead of querying a database, we're going to fetch the example data
|
||||
* property we created for use in this plugin. This makes this example
|
||||
* package slightly different than one you might build on your own. In
|
||||
* this example, we'll be using array manipulation to sort and paginate
|
||||
* our data. In a real-world implementation, you will probably want to
|
||||
* use sort and pagination data to build a custom query instead, as you'll
|
||||
* be able to use your precisely-queried data immediately.
|
||||
*/
|
||||
$notifications = nf_get_notifications_by_form_id( $this->form_id );
|
||||
$data = array();
|
||||
|
||||
if ( is_array( $notifications ) ) {
|
||||
foreach ( $notifications as $id => $n ) {
|
||||
if ( isset ( $_REQUEST['type'] ) && ! empty( $_REQUEST['type'] ) ) {
|
||||
if ( nf_get_object_meta_value( $id, 'type' ) == esc_html( $_REQUEST['type'] ) ) {
|
||||
$n['id'] = $id;
|
||||
$data[] = $n;
|
||||
}
|
||||
} else {
|
||||
$n['id'] = $id;
|
||||
$data[] = $n;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This checks for sorting input and sorts the data in our array accordingly.
|
||||
*
|
||||
* In a real-world situation involving a database, you would probably want
|
||||
* to handle sorting by passing the 'orderby' and 'order' values directly
|
||||
* to a custom query. The returned data will be pre-sorted, and this array
|
||||
* sorting technique would be unnecessary.
|
||||
*/
|
||||
function usort_reorder($a,$b){
|
||||
$orderby = (!empty($_REQUEST['orderby'])) ? esc_html( $_REQUEST['orderby'] ) : 'name'; //If no sort, default to title
|
||||
$order = (!empty($_REQUEST['order'])) ? esc_html( $_REQUEST['order'] ) : 'asc'; //If no order, default to asc
|
||||
$result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order
|
||||
return ($order==='asc') ? $result : -$result; //Send final sort direction to usort
|
||||
}
|
||||
usort($data, 'usort_reorder');
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* ---------------------------------------------------------------------
|
||||
* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
*
|
||||
* In a real-world situation, this is where you would place your query.
|
||||
*
|
||||
* For information on making queries in WordPress, see this Codex entry:
|
||||
* http://codex.wordpress.org/Class_Reference/wpdb
|
||||
*
|
||||
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
* ---------------------------------------------------------------------
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* REQUIRED for pagination. Let's figure out what page the user is currently
|
||||
* looking at. We'll need this later, so you should always include it in
|
||||
* your own package classes.
|
||||
*/
|
||||
$current_page = $this->get_pagenum();
|
||||
|
||||
/**
|
||||
* REQUIRED for pagination. Let's check how many items are in our data array.
|
||||
* In real-world use, this would be the total number of items in your database,
|
||||
* without filtering. We'll need this later, so you should always include it
|
||||
* in your own package classes.
|
||||
*/
|
||||
$total_items = count($data);
|
||||
|
||||
|
||||
/**
|
||||
* The WP_List_Table class does not handle pagination for us, so we need
|
||||
* to ensure that the data is trimmed to only the current page. We can use
|
||||
* array_slice() to
|
||||
*/
|
||||
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* REQUIRED. Now we can add our *sorted* data to the items property, where
|
||||
* it can be used by the rest of the class.
|
||||
*/
|
||||
$this->items = $data;
|
||||
|
||||
|
||||
/**
|
||||
* REQUIRED. We also have to register our pagination options & calculations.
|
||||
*/
|
||||
$this->set_pagination_args( array(
|
||||
'total_items' => $total_items, //WE have to calculate the total number of items
|
||||
'per_page' => $per_page, //WE have to determine how many items to show on a page
|
||||
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
|
||||
) );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,540 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Main Notifications Class
|
||||
*
|
||||
* Adds our notifications to the form edit page.
|
||||
* Gets notification types
|
||||
* Listens for ajax commands to delete/activate/deactivate notifications
|
||||
* Listens for bulk actions from the notifications admin page
|
||||
* Adds notification types processing to the appropriate action hook
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Notifications
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.8
|
||||
*/
|
||||
|
||||
class NF_Notifications
|
||||
{
|
||||
/**
|
||||
* Get things rolling
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @since 2.8
|
||||
*/
|
||||
function __construct() {
|
||||
global $pagenow;
|
||||
|
||||
// Register our notification types
|
||||
Ninja_Forms()->notification_types['email'] = require_once( NF_PLUGIN_DIR . 'classes/notification-email.php' );
|
||||
Ninja_Forms()->notification_types['redirect'] = require_once( NF_PLUGIN_DIR . 'classes/notification-redirect.php' );
|
||||
Ninja_Forms()->notification_types['success_message'] = require_once( NF_PLUGIN_DIR . 'classes/notification-success-message.php' );
|
||||
|
||||
Ninja_Forms()->notification_types = apply_filters( 'nf_notification_types', Ninja_Forms()->notification_types );
|
||||
|
||||
// Register our notification tab
|
||||
add_action( 'admin_init', array( $this, 'register_tab' ) );
|
||||
|
||||
// Only add these actions if we are actually on the notification tab.
|
||||
if ( 'admin.php' == $pagenow && isset ( $_REQUEST['page'] ) && $_REQUEST['page'] == 'ninja-forms' && isset ( $_REQUEST['tab'] ) && $_REQUEST['tab'] == 'notifications' ) {
|
||||
add_action( 'admin_init', array( $this, 'add_js' ) );
|
||||
add_action( 'admin_init', array( $this, 'add_css' ) );
|
||||
add_action( 'admin_init', array( $this, 'bulk_actions' ) );
|
||||
add_action( 'admin_init', array( $this, 'duplicate_notification' ) );
|
||||
add_filter( 'media_buttons_context', array( $this, 'tinymce_buttons' ) );
|
||||
}
|
||||
|
||||
add_action( 'wp_ajax_nf_delete_notification', array( $this, 'delete_notification' ) );
|
||||
add_action( 'wp_ajax_nf_activate_notification', array( $this, 'activate_notification' ) );
|
||||
add_action( 'wp_ajax_nf_deactivate_notification', array( $this, 'deactivate_notification' ) );
|
||||
|
||||
|
||||
|
||||
// Add our hook to add notification types processors.
|
||||
add_action( 'ninja_forms_post_process', array( $this, 'notification_processing' ), 999 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register our setting tab.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function register_tab() {
|
||||
$form_id = isset ( $_REQUEST['form_id'] ) ? absint( $_REQUEST['form_id'] ) : '';
|
||||
$action = isset ( $_REQUEST['notification-action'] ) ? esc_html( $_REQUEST['notification-action'] ) : '';
|
||||
$output_form = false;
|
||||
$show_save = false;
|
||||
if ( 'edit' == $action || 'new' == $action ) {
|
||||
$output_form = true;
|
||||
$show_save = true;
|
||||
}
|
||||
|
||||
$args = array(
|
||||
'name' => __( 'Email & Actions', 'ninja-forms' ),
|
||||
'page' => 'ninja-forms',
|
||||
'display_function' => array( $this, 'output_admin' ),
|
||||
'save_function' => array( $this, 'save_admin' ),
|
||||
'disable_no_form_id' => true,
|
||||
'show_save' => $show_save,
|
||||
'tab_reload' => true,
|
||||
'output_form' => $output_form,
|
||||
);
|
||||
|
||||
ninja_forms_register_tab( 'notifications', $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue JS
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function add_js() {
|
||||
global $ninja_forms_fields;
|
||||
|
||||
$form_id = isset ( $_REQUEST['form_id'] ) ? absint( $_REQUEST['form_id'] ) : '';
|
||||
if ( empty ( $form_id ) )
|
||||
return false;
|
||||
|
||||
if ( defined( 'NINJA_FORMS_JS_DEBUG' ) && NINJA_FORMS_JS_DEBUG ) {
|
||||
$suffix = '';
|
||||
$src = 'dev';
|
||||
} else {
|
||||
$suffix = '.min';
|
||||
$src = 'min';
|
||||
}
|
||||
|
||||
wp_enqueue_script( 'nf-notifications',
|
||||
NF_PLUGIN_URL . 'assets/js/' . $src .'/notifications' . $suffix . '.js',
|
||||
array( 'jquery', 'jquery-ui-autocomplete' ) );
|
||||
|
||||
wp_enqueue_script( 'nf-tokenize',
|
||||
NF_PLUGIN_URL . 'assets/js/' . $src .'/bootstrap-tokenfield' . $suffix . '.js',
|
||||
array( 'jquery', 'jquery-ui-autocomplete' ) );
|
||||
|
||||
wp_enqueue_script( 'nf-combobox',
|
||||
NF_PLUGIN_URL . 'assets/js/' . $src .'/combobox' . $suffix . '.js',
|
||||
array( 'jquery', 'jquery-ui-core', 'jquery-ui-button', 'jquery-ui-autocomplete' ) );
|
||||
|
||||
$all_fields = Ninja_Forms()->form( $form_id )->fields;
|
||||
$process_fields = array();
|
||||
$search_fields = array();
|
||||
$search_fields['email'] = array();
|
||||
$search_fields['name'] = array();
|
||||
$fields = array();
|
||||
// Generate our search fields JS var.
|
||||
foreach( $all_fields as $field_id => $field ) {
|
||||
$label = esc_attr( nf_get_field_admin_label( $field_id ) );
|
||||
|
||||
$fields[ $field_id ] = array( 'field_id' => $field_id, 'label' => $label );
|
||||
|
||||
if ( strlen( $label ) > 30 ) {
|
||||
$tmp_label = substr( $label, 0, 30 );
|
||||
} else {
|
||||
$tmp_label = $label;
|
||||
}
|
||||
|
||||
$tmp_array = array( 'value' => 'field_' . $field_id, 'label' => $tmp_label . ' - ID: ' . $field_id );
|
||||
|
||||
$admin_label = $label;
|
||||
|
||||
$label = isset( $field['data']['label'] ) ? $field['data']['label'] : '';
|
||||
|
||||
// Check to see if this field is supposed to be "processed"
|
||||
$type = $field['type'];
|
||||
if ( isset ( $ninja_forms_fields[ $type ]['process_field'] ) && $ninja_forms_fields[ $type ]['process_field'] ) {
|
||||
$process_fields[ $field_id ] = array( 'field_id' => $field_id, 'label' => $label, 'admin_label' => $admin_label );
|
||||
$search_fields['all'][] = $tmp_array;
|
||||
}
|
||||
|
||||
if ( $field['type'] == '_text' && isset ( $field['data']['email'] ) && $field['data']['email'] == 1 ) {
|
||||
$search_fields['email'][] = $tmp_array;
|
||||
} else if ( $field['type'] == '_text' && isset ( $field['data']['first_name'] ) && $field['data']['first_name'] == 1 ) {
|
||||
$search_fields['name'][] = $tmp_array;
|
||||
} else if ( $field['type'] == '_text' && isset ( $field['data']['last_name'] ) && $field['data']['last_name'] == 1 ) {
|
||||
$search_fields['name'][] = $tmp_array;
|
||||
}
|
||||
}
|
||||
|
||||
// Add our "process_fields" to our form global
|
||||
Ninja_Forms()->form( $form_id )->process_fields = $process_fields;
|
||||
|
||||
$js_vars = apply_filters( 'nf_notification_admin_js_vars', array(
|
||||
'activate' => __( 'Activate', 'ninja-forms' ),
|
||||
'deactivate' => __( 'Deactivate', 'ninja-forms' ),
|
||||
'search_fields' => $search_fields,
|
||||
'tokens' => array(),
|
||||
'all_fields' => $fields,
|
||||
'process_fields' => $process_fields,
|
||||
'filter_type' => esc_url_raw( remove_query_arg( array( 'type' ) ) ),
|
||||
) );
|
||||
|
||||
wp_localize_script( 'nf-notifications', 'nf_notifications', $js_vars );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue CSS
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function add_css() {
|
||||
wp_enqueue_style( 'nf-notifications',
|
||||
NF_PLUGIN_URL . 'assets/css/notifications.css' );
|
||||
|
||||
wp_enqueue_style( 'nf-tokenize',
|
||||
NF_PLUGIN_URL . 'assets/css/bootstrap-tokenfield.css' );
|
||||
|
||||
wp_enqueue_style( 'nf-combobox',
|
||||
NF_PLUGIN_URL . 'assets/css/combobox.css' );
|
||||
|
||||
// wp_enqueue_style( 'nf-bootstrap',
|
||||
// 'http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our notifications admin.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function output_admin() {
|
||||
$action = isset ( $_REQUEST['notification-action'] ) ? esc_html( $_REQUEST['notification-action'] ) : '';
|
||||
|
||||
?>
|
||||
<div class="wrap">
|
||||
<?php
|
||||
if ( '' == $action ) {
|
||||
?>
|
||||
<h2><?php _e( 'Email & Actions', 'ninja-forms' ); ?> <a href="<?php echo esc_url( add_query_arg( array( 'notification-action' => 'new' ) ) ); ?>" class="add-new-h2"><?php _e( 'Add New', 'ninja-forms' );?></a></h2>
|
||||
|
||||
<!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions -->
|
||||
<form id="forms-filter" method="get">
|
||||
<!-- For plugins, we also need to ensure that the form posts back to our current page -->
|
||||
<input type="hidden" name="page" value="<?php echo esc_attr( $_REQUEST['page'] ); ?>" />
|
||||
<input type="hidden" name="tab" value="<?php echo esc_attr( $_REQUEST['tab'] ); ?>" />
|
||||
<input type="hidden" name="form_id" value="<?php echo esc_attr( $_REQUEST['form_id'] ); ?>" />
|
||||
<?php
|
||||
//Create an instance of our package class...
|
||||
$nf_all_forms = new NF_Notifications_List_Table();
|
||||
//Fetch, prepare, sort, and filter our data...
|
||||
$nf_all_forms->prepare_items();
|
||||
// Now we can render the completed list table
|
||||
$nf_all_forms->display();
|
||||
?>
|
||||
</form>
|
||||
<?php
|
||||
} else {
|
||||
$id = isset ( $_REQUEST['id'] ) ? absint( $_REQUEST['id'] ) : '';
|
||||
if ( $id == '' ) {
|
||||
$id = 'new';
|
||||
$this_type = 'email';
|
||||
$title = __( 'New Action', 'ninja-forms' );
|
||||
} else {
|
||||
$this_type = Ninja_Forms()->notification( $id )->type;
|
||||
$title = __( 'Edit Action', 'ninja-forms' ) . ' - ID ' . $id;
|
||||
}
|
||||
|
||||
?>
|
||||
<h2><?php echo $title; ?> <a href="<?php echo esc_url( remove_query_arg( array( 'notification-action', 'id', 'update_message' ) ) );?>" class="button-secondary"><?php _e( 'Back To List', 'ninja-forms' );?></a></h2>
|
||||
|
||||
<input type="hidden" id="notification_id" name="notification_id" value="<?php echo $id; ?>" />
|
||||
<table class="form-table">
|
||||
<tbody id="notification-main">
|
||||
<tr>
|
||||
<th scope="row"><label for="setting-name"><?php _e( 'Action Name', 'ninja-forms' ); ?></label></th>
|
||||
<td><input name="settings[name]" type="text" id="settings-name" value="<?php echo nf_get_object_meta_value( $id, 'name' ); ?>" class="regular-text"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="type"><?php _e( 'Type', 'ninja-forms' ); ?></label></th>
|
||||
<td>
|
||||
<select name="settings[type]" id="settings-type">
|
||||
<?php
|
||||
foreach ( $this->get_types() as $slug => $nicename ) {
|
||||
?>
|
||||
<option value="<?php echo $slug; ?>" <?php selected ( $this_type, $slug ); ?>><?php echo $nicename; ?></option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<span class="nf-more-actions"><a href="<?php echo nf_aff_link( 'https://ninjaforms.com/extensions/?display=actions&utm_medium=plugin&utm_source=action-single&utm_campaign=Ninja+Forms+Upsell&utm_content=Ninja+Forms+Actions' ); ?>" target="_blank"><?php _e( 'Get More Actions', 'ninja-forms' ); ?> <span class="dashicons dashicons-external"></span></a></span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<?php
|
||||
do_action( 'nf_edit_notification_settings', $id );
|
||||
foreach ( $this->get_types() as $slug => $nicename ) {
|
||||
if ( $this_type == $slug ) {
|
||||
$display = '';
|
||||
} else {
|
||||
$display = 'display:none;';
|
||||
}
|
||||
?>
|
||||
<tbody id="notification-<?php echo $slug; ?>" class="notification-type" style="<?php echo $display;?>">
|
||||
<?php
|
||||
// Call our type edit screen.
|
||||
Ninja_Forms()->notification_types[ $slug ]->edit_screen( $id );
|
||||
?>
|
||||
</tbody>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<?php
|
||||
} ?>
|
||||
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Save our notifications admin.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function save_admin( $form_id, $data ) {
|
||||
if ( ! isset ( $data['notification_id'] ) || empty ( $data['notification_id'] ) )
|
||||
return false;
|
||||
|
||||
$n_id = $data['notification_id'];
|
||||
$settings = $data['settings'];
|
||||
|
||||
if ( 'new' == $n_id ) {
|
||||
$type = $settings['type'];
|
||||
$n_id = $this->create( $form_id );
|
||||
$new = true;
|
||||
} else {
|
||||
$type = Ninja_Forms()->notification( $n_id )->type;
|
||||
$new = false;
|
||||
}
|
||||
|
||||
$data = Ninja_Forms()->notification_types[ $type ]->save_admin( $n_id, $data );
|
||||
|
||||
foreach ( $settings as $meta_key => $meta_value ) {
|
||||
nf_update_object_meta( $n_id, $meta_key, nf_wp_kses_post_deep( $meta_value ) );
|
||||
}
|
||||
|
||||
do_action( 'nf_save_notification', $n_id, $data, $new );
|
||||
|
||||
if ( $new ) {
|
||||
$redirect = esc_url_raw( remove_query_arg( array( 'notification-action' ) ) );
|
||||
$redirect = esc_url_raw( add_query_arg( array( 'id' => $n_id, 'notification-action' => 'edit', 'update_message' => urlencode( __( 'Action Updated', 'ninja-forms' ) ) ), $redirect ) );
|
||||
wp_redirect( $redirect );
|
||||
die();
|
||||
}
|
||||
|
||||
return __( 'Action Updated', 'ninja-forms' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get our registered notification types
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return array $types
|
||||
*/
|
||||
public function get_types() {
|
||||
$types = array();
|
||||
foreach ( Ninja_Forms()->notification_types as $slug => $object ) {
|
||||
$types[ $slug ] = $object->name;
|
||||
}
|
||||
return $types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a notification.
|
||||
* Hooked into the ajax action for nf_delete_notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function delete_notification() {
|
||||
// Bail if our nonce doesn't verify.
|
||||
check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
|
||||
|
||||
$n_id = absint( $_REQUEST['n_id'] );
|
||||
Ninja_Forms()->notification( $n_id )->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate a notification.
|
||||
* Hooked into the ajax action for nf_activate_notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function activate_notification() {
|
||||
// Bail if our nonce doesn't verify.
|
||||
check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
|
||||
|
||||
$n_id = absint( $_REQUEST['n_id'] );
|
||||
Ninja_Forms()->notification( $n_id )->activate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Deactivate a notification.
|
||||
* Hooked into the ajax action for nf_deactivate_notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function deactivate_notification() {
|
||||
// Bail if our nonce doesn't verify.
|
||||
check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
|
||||
|
||||
$n_id = absint( $_REQUEST['n_id'] );
|
||||
Ninja_Forms()->notification( $n_id )->deactivate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate our notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function duplicate_notification() {
|
||||
if ( ! isset ( $_REQUEST['notification-action'] ) || $_REQUEST['notification-action'] != 'duplicate' )
|
||||
return false;
|
||||
|
||||
$n_id = isset ( $_REQUEST['id'] ) ? absint( $_REQUEST['id'] ) : '';
|
||||
|
||||
// Bail if we don't have an ID.
|
||||
if ( '' === $n_id )
|
||||
return false;
|
||||
|
||||
Ninja_Forms()->notification( $n_id )->duplicate();
|
||||
|
||||
wp_redirect( esc_url_raw( remove_query_arg( array( 'notification-action' ) ) ) );
|
||||
die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new notification
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return int $n_id
|
||||
*/
|
||||
public function create( $form_id = '' ) {
|
||||
// Bail if we don't have a form_id
|
||||
if ( '' == $form_id )
|
||||
return false;
|
||||
|
||||
$n_id = nf_insert_notification( $form_id );
|
||||
|
||||
// Activate our new notification
|
||||
Ninja_Forms()->notification( $n_id )->activate();
|
||||
|
||||
return $n_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle bulk actions
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function bulk_actions() {
|
||||
$action = '';
|
||||
|
||||
if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
|
||||
$action = esc_html( $_REQUEST['action2'] );
|
||||
|
||||
if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
|
||||
$action = esc_html( $_REQUEST['action'] );
|
||||
|
||||
$n_ids = isset ( $_REQUEST['notification'] ) ? esc_html( $_REQUEST['notification'] ) : '';
|
||||
|
||||
if ( ! is_array( $n_ids ) || empty( $n_ids ) )
|
||||
return false;
|
||||
|
||||
if( 'delete' === $action ) {
|
||||
foreach ( $n_ids as $n_id ) {
|
||||
Ninja_Forms()->notification( $n_id )->delete();
|
||||
}
|
||||
} else if ( 'activate' === $action ) {
|
||||
foreach ( $n_ids as $n_id ) {
|
||||
Ninja_Forms()->notification( $n_id )->activate();
|
||||
}
|
||||
} else if ( 'deactivate' === $action ) {
|
||||
foreach ( $n_ids as $n_id ) {
|
||||
Ninja_Forms()->notification( $n_id )->deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
wp_redirect( esc_url_raw( remove_query_arg( array( 'notification', '_wpnonce', '_wp_http_referer', 'action', 'action2' ) ) ) );
|
||||
die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Output our tinyMCE field buttons
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function tinymce_buttons( $context ) {
|
||||
$form_id = isset ( $_REQUEST['form_id'] ) ? absint( $_REQUEST['form_id'] ) : '';
|
||||
if ( empty ( $form_id ) )
|
||||
return $context;
|
||||
|
||||
$all_fields = Ninja_Forms()->form( $form_id )->process_fields;
|
||||
$first_option = __( 'Select a field or type to search', 'ninja-forms' );
|
||||
|
||||
$fields = array();
|
||||
$html = '<select class="nf-fields-combobox" data-first-option="' . $first_option . '">';
|
||||
$html .= '<option value="">' . $first_option .'</option>';
|
||||
foreach( $all_fields as $field_id => $field ) {
|
||||
$label = esc_html( $field['label'] );
|
||||
if ( strlen( $label ) > 30 )
|
||||
$label = substr( $label, 0, 30 ) . '...';
|
||||
|
||||
$html .= '<option value="' . $field_id . '">' . $label . ' - ID: ' . $field_id . '</option>';
|
||||
}
|
||||
$html .= '</select>';
|
||||
$html .= ' <a href="#" class="button-secondary nf-insert-field">' . __( 'Insert Field', 'ninja-forms' ) . '</a> <a href="#" class="button-secondary nf-insert-all-fields">' . __( 'Insert All Fields', 'ninja-forms' ) . '</a>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loop through our notifications and add their processing functions to the appropriate hook.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.8
|
||||
* @return void
|
||||
*/
|
||||
public function notification_processing() {
|
||||
global $ninja_forms_processing;
|
||||
|
||||
$form_id = $ninja_forms_processing->get_form_ID();
|
||||
$notifications = nf_get_notifications_by_form_id( $form_id, false );
|
||||
if ( is_array( $notifications ) ) {
|
||||
foreach ( $notifications as $id ) {
|
||||
do_action( 'nf_notification_before_process', $id );
|
||||
if ( Ninja_Forms()->notification( $id )->active ) {
|
||||
Ninja_Forms()->notification( $id )->process();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Registration class. Responsible for handling registration of fields, notifications, and sidebars
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Register
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 3.0
|
||||
*/
|
||||
|
||||
class NF_Register
|
||||
{
|
||||
|
||||
/**
|
||||
* Function that registers a notification type
|
||||
*
|
||||
* @access public
|
||||
* @param string $slug - Notification type slug. Must be unique.
|
||||
* @param string $classname - Name of the class that should be used for the notification type.
|
||||
* @since 3.0
|
||||
* @return void
|
||||
*/
|
||||
public function notification_type( $slug, $nicename, $classname ) {
|
||||
if ( ! empty( $slug ) && ! empty( $classname ) && ! isset ( Ninja_Forms()->registered_field_types[ $slug ] ) ) {
|
||||
Ninja_Forms()->registered_notification_types[ $slug ]['nicename'] = $nicename;
|
||||
Ninja_Forms()->registered_notification_types[ $slug ]['classname'] = $classname;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,148 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* NF Session
|
||||
*
|
||||
* This is a wrapper class for WP_Session / PHP $_SESSION and handles the storage of cart items, purchase sessions, etc
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Session
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.9.18
|
||||
*/
|
||||
// Exit if accessed directly
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* NF_Session Class
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
class NF_Session {
|
||||
/**
|
||||
* Holds our session data
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
* @since 2.9.18
|
||||
*/
|
||||
private $session;
|
||||
/**
|
||||
* Session index prefix
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
* @since 2.9.18
|
||||
*/
|
||||
private $prefix = '';
|
||||
/**
|
||||
* Get things started
|
||||
*
|
||||
* Defines our WP_Session constants, includes the necessary libraries and
|
||||
* retrieves the WP Session instance
|
||||
*
|
||||
* @since 2.9.18
|
||||
*/
|
||||
public function __construct() {
|
||||
// Use WP_Session (default)
|
||||
if ( ! defined( 'WP_SESSION_COOKIE' ) ) {
|
||||
define( 'WP_SESSION_COOKIE', 'nf_wp_session' );
|
||||
}
|
||||
if ( ! class_exists( 'Recursive_ArrayAccess' ) ) {
|
||||
require_once NF_PLUGIN_DIR . 'includes/libraries/class-recursive-arrayaccess.php';
|
||||
}
|
||||
if ( ! class_exists( 'WP_Session' ) ) {
|
||||
require_once NF_PLUGIN_DIR . 'includes/libraries/class-wp-session.php';
|
||||
require_once NF_PLUGIN_DIR . 'includes/libraries/wp-session.php';
|
||||
}
|
||||
|
||||
add_filter( 'wp_session_expiration_variant', array( $this, 'set_expiration_variant_time' ), 99999 );
|
||||
add_filter( 'wp_session_expiration', array( $this, 'set_expiration_time' ), 99999 );
|
||||
|
||||
add_action( 'plugins_loaded', array( $this, 'init' ), -1 );
|
||||
|
||||
}
|
||||
/**
|
||||
* Setup the WP_Session instance
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.18
|
||||
* @return void
|
||||
*/
|
||||
public function init() {
|
||||
$this->session = WP_Session::get_instance();
|
||||
return $this->session;
|
||||
}
|
||||
/**
|
||||
* Retrieve session ID
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.18
|
||||
* @return string Session ID
|
||||
*/
|
||||
public function get_id() {
|
||||
return $this->session->session_id;
|
||||
}
|
||||
/**
|
||||
* Retrieve a session variable
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.18
|
||||
* @param string $key Session key
|
||||
* @return string Session variable
|
||||
*/
|
||||
public function get( $key ) {
|
||||
$key = sanitize_key( $key );
|
||||
return isset( $this->session[ $key ] ) ? maybe_unserialize( $this->session[ $key ] ) : false;
|
||||
}
|
||||
/**
|
||||
* Set a session variable
|
||||
*
|
||||
* @since 2.9.18
|
||||
* @param string $key Session key
|
||||
* @param integer $value Session variable
|
||||
* @return string Session variable
|
||||
*/
|
||||
public function set( $key, $value ) {
|
||||
$key = sanitize_key( $key );
|
||||
if ( is_array( $value ) ) {
|
||||
$this->session[ $key ] = serialize( $value );
|
||||
} else {
|
||||
$this->session[ $key ] = $value;
|
||||
}
|
||||
return $this->session[ $key ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a session variable
|
||||
*
|
||||
* @since 2.9.28
|
||||
* @param string $key
|
||||
* @return void
|
||||
*/
|
||||
public function delete() {
|
||||
delete_option( '_wp_session_' . $this->session->session_id );
|
||||
delete_option( '_wp_session_expires_' . $this->session->session_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Force the cookie expiration variant time to 23 minutes
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.18
|
||||
* @param int $exp Default expiration (1 hour)
|
||||
* @return int
|
||||
*/
|
||||
public function set_expiration_variant_time( $exp ) {
|
||||
return 60 * 23;
|
||||
}
|
||||
/**
|
||||
* Force the cookie expiration time to 24 minutes
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.18
|
||||
* @param int $exp Default expiration (1 hour)
|
||||
* @return int
|
||||
*/
|
||||
public function set_expiration_time( $exp ) {
|
||||
return 60 * 24;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,197 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
if( ! function_exists( 'nf_is_func_disabled' ) ) {
|
||||
function nf_is_func_disabled($function)
|
||||
{
|
||||
$disabled = explode(',', ini_get('disable_functions'));
|
||||
|
||||
return in_array($function, $disabled);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for performing actions incrementally. Internally used for converting submissions, exporting submissions, etc.
|
||||
* Very useful when interacting with large amounts of data.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Step Processing
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.7.4
|
||||
*/
|
||||
|
||||
class NF_Step_Processing
|
||||
{
|
||||
|
||||
/**
|
||||
* @var action
|
||||
*/
|
||||
var $action = '';
|
||||
|
||||
/**
|
||||
* @var step
|
||||
*/
|
||||
var $step = '';
|
||||
|
||||
/**
|
||||
* @var total_steps
|
||||
*/
|
||||
var $total_steps = '';
|
||||
|
||||
/**
|
||||
* @var redirect
|
||||
*/
|
||||
var $redirect = '';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
var $errors = array();
|
||||
|
||||
/**
|
||||
* @var args
|
||||
*/
|
||||
var $args = array();
|
||||
|
||||
/**
|
||||
* Get things rolling
|
||||
*
|
||||
* @since 2.7.4
|
||||
* @return void
|
||||
*/
|
||||
function __construct() {
|
||||
|
||||
//Bail if we aren't in the admin.
|
||||
if ( ! is_admin() )
|
||||
return false;
|
||||
|
||||
if ( function_exists( 'ignore_user_abort' ) && ! nf_is_func_disabled( 'ignore_user_abort' ) ) {
|
||||
ignore_user_abort( true );
|
||||
}
|
||||
|
||||
add_action( 'wp_ajax_nf_' . $this->action, array( $this, 'processing' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Process our request.
|
||||
* Call the appropriate loading or step functions.
|
||||
*
|
||||
* @since 2.7.6
|
||||
* @return void
|
||||
*/
|
||||
public function processing() {
|
||||
|
||||
// Get our passed arguments. These come from the querysting of the processing page.
|
||||
if ( isset ( $_REQUEST['args'] ) ) {
|
||||
$this->args = $_REQUEST['args'];
|
||||
if ( isset ( $this->args['redirect'] ) ) {
|
||||
$this->redirect = $this->args['redirect'];
|
||||
}
|
||||
} else {
|
||||
$this->args = array();
|
||||
}
|
||||
|
||||
// Get our current step.
|
||||
$this->step = isset ( $_REQUEST['step'] )? esc_html( $_REQUEST['step'] ) : 'loading';
|
||||
|
||||
// Get our total steps
|
||||
$this->total_steps = isset ( $_REQUEST['total_steps'] )? esc_html( $_REQUEST['total_steps'] ) : 0;
|
||||
|
||||
// If our step is loading, then we need to return how many total steps there are along with the next step, which is 1.
|
||||
if ( 'loading' == $this->step ) {
|
||||
$return = $this->loading();
|
||||
if ( ! isset ( $return['step'] ) ) {
|
||||
$saved_step = get_user_option( 'nf_step_processing_' . $this->action . '_step' );
|
||||
if ( ! empty ( $saved_step ) ) {
|
||||
$this->step = $saved_step;
|
||||
} else {
|
||||
$this->step = 1;
|
||||
}
|
||||
|
||||
$return['step'] = $this->step;
|
||||
}
|
||||
if ( ! isset ( $return['complete'] ) ) {
|
||||
$return['complete'] = false;
|
||||
}
|
||||
} else { // We aren't on the loading step, so do our processing.
|
||||
$return = $this->step();
|
||||
if ( ! isset ( $return['step'] ) ) {
|
||||
$this->step++;
|
||||
$return['step'] = $this->step;
|
||||
}
|
||||
|
||||
if ( ! isset ( $return['complete'] ) ) {
|
||||
if ( $this->step > $this->total_steps ) {
|
||||
$complete = true;
|
||||
} else {
|
||||
$complete = false;
|
||||
}
|
||||
$return['complete'] = $complete;
|
||||
}
|
||||
|
||||
$return['total_steps'] = $this->total_steps;
|
||||
}
|
||||
|
||||
$user_id = get_current_user_id();
|
||||
|
||||
if ( $return['complete'] ) {
|
||||
// Delete our step option
|
||||
delete_user_option( $user_id, 'nf_step_processing_' . $this->action . '_step' );
|
||||
// Set our redirect variable.
|
||||
$return['redirect'] = $this->redirect;
|
||||
// Run our complete function
|
||||
$this->complete();
|
||||
} else {
|
||||
// Save our current step so that we can resume if necessary
|
||||
update_user_option( $user_id, 'nf_step_processing_' . $this->action . '_step', $this->step );
|
||||
}
|
||||
|
||||
if ( isset ( $this->redirect ) && ! empty ( $this->redirect ) ) {
|
||||
$this->args['redirect'] = $this->redirect;
|
||||
}
|
||||
|
||||
$return['errors'] = ( $this->errors ) ? $this->errors : FALSE;
|
||||
|
||||
$return['args'] = $this->args;
|
||||
|
||||
echo json_encode( $return );
|
||||
die();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Run our loading process.
|
||||
* This function should be overwritten in child classes.
|
||||
*
|
||||
* @since 2.7.4
|
||||
* @return array $args
|
||||
*/
|
||||
public function loading() {
|
||||
// This space left intentionally blank.
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is called for every step.
|
||||
* This function should be overwritten in child classes.
|
||||
*
|
||||
* @since 2.7.4
|
||||
* @return array $args
|
||||
*/
|
||||
public function step() {
|
||||
// This space left intentionally blank.
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is called for every step.
|
||||
* This function should be overwritten in child classes.
|
||||
*
|
||||
* @since 2.7.4
|
||||
* @return array $args
|
||||
*/
|
||||
public function complete() {
|
||||
// This space left intentionally blank.
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,405 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Submission.
|
||||
* This class handles storing, retrieving, editing a submission.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Submissions
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.7
|
||||
*/
|
||||
|
||||
class NF_Sub {
|
||||
|
||||
/**
|
||||
* @var $sub_id store our sub id
|
||||
*/
|
||||
var $sub_id;
|
||||
|
||||
/**
|
||||
* @var $seq_num store our sequential number
|
||||
*/
|
||||
var $seq_num;
|
||||
|
||||
/**
|
||||
* @var $form_id store our form_id
|
||||
*/
|
||||
var $form_id;
|
||||
|
||||
/**
|
||||
* @var $fields store our user values
|
||||
*/
|
||||
var $fields;
|
||||
|
||||
/**
|
||||
* @var $action store the action that created this sub
|
||||
*/
|
||||
var $action;
|
||||
|
||||
/**
|
||||
* @var $user_id store the user ID for this submission
|
||||
*/
|
||||
var $user_id;
|
||||
|
||||
/**
|
||||
* @var $meta store our non-field meta
|
||||
*/
|
||||
var $meta;
|
||||
|
||||
/**
|
||||
* @var $date_submitted store our submitted date
|
||||
*/
|
||||
var $date_submitted;
|
||||
|
||||
/**
|
||||
* @var $date_modified store our modified date
|
||||
*/
|
||||
var $date_modified;
|
||||
|
||||
/**
|
||||
* Get things started
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return void/
|
||||
*/
|
||||
public function __construct( $sub_id ) {
|
||||
global $ninja_forms_fields;
|
||||
|
||||
// Bail if the sub doesn't exist.
|
||||
$sub = get_post( $sub_id );
|
||||
if ( ! is_object( $sub ) )
|
||||
return false;
|
||||
|
||||
// Set our sub id
|
||||
$this->sub_id = $sub_id;
|
||||
|
||||
// Populate our fields
|
||||
$this->fields = array();
|
||||
$this->retrieve_fields();
|
||||
|
||||
// Setup our form id var
|
||||
$this->form_id = $this->get_meta( '_form_id' );
|
||||
// Setup our action var
|
||||
$this->action = $this->get_meta( '_action' );
|
||||
// Setup our sequential id
|
||||
$this->seq_num = $this->get_meta( '_seq_num' );
|
||||
// Setup our user_id var
|
||||
$this->user_id = $sub->post_author;
|
||||
// Setup our date submitted var
|
||||
$this->date_submitted = get_the_time( 'Y-m-d G:i:s', $sub_id );
|
||||
// Setup our date modified var
|
||||
$this->date_modified = get_post_modified_time( 'Y-m-d G:i:s', false, $sub_id );
|
||||
|
||||
}
|
||||
|
||||
private function retrieve_fields() {
|
||||
global $ninja_forms_fields;
|
||||
|
||||
// Setup our fields and meta vars.
|
||||
$post_meta = get_post_custom( $this->sub_id );
|
||||
|
||||
foreach ( $post_meta as $key => $array ) {
|
||||
if ( is_serialized( $array[0] ) ) {
|
||||
$meta_value = unserialize( $array[0] );
|
||||
} else {
|
||||
$meta_value = $array[0];
|
||||
}
|
||||
|
||||
if ( strpos( $key, '_field_' ) !== false ) {
|
||||
$field_id = str_replace( '_field_', '', $key );
|
||||
$field = ninja_forms_get_field_by_id( $field_id );
|
||||
$field_type = $field['type'];
|
||||
|
||||
// Check to see if our field type has been set as a "process_field".
|
||||
if ( isset ( $ninja_forms_fields[ $field_type ] ) ) {
|
||||
$reg_field = $ninja_forms_fields[ $field_type ];
|
||||
$process_field = $reg_field['process_field'];
|
||||
} else {
|
||||
$process_field = false;
|
||||
}
|
||||
|
||||
if ( $process_field ) {
|
||||
$this->fields[ $field_id ] = $meta_value;
|
||||
}
|
||||
|
||||
} else if ( $key != '_form_id' && $key != '_action' ) {
|
||||
$this->meta[ $key ] = $meta_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our form id
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_form_id( $form_id ) {
|
||||
if ( update_post_meta( $this->sub_id, '_form_id', $form_id ) ) {
|
||||
$this->form_id = $form_id;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our action
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_action( $action ) {
|
||||
if ( update_post_meta( $this->sub_id, '_action', $action ) ) {
|
||||
$this->action = $action;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our sequential id
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_seq_num( $seq_num ) {
|
||||
if ( update_post_meta( $this->sub_id, '_seq_num', $seq_num ) ) {
|
||||
$this->seq_num = $seq_num;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our user id
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_user_id( $user_id ) {
|
||||
$args = array(
|
||||
'ID' => $this->sub_id,
|
||||
'post_author' => $user_id,
|
||||
);
|
||||
|
||||
// Update the post into the database
|
||||
if ( wp_update_post( $args ) ) {
|
||||
$this->user_id = $user_id;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our date submitted
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_date_submitted( $date ) {
|
||||
$args = array(
|
||||
'ID' => $this->sub_id,
|
||||
'post_date' => $date,
|
||||
'post_date_gmt' => get_gmt_from_date( $date ),
|
||||
);
|
||||
|
||||
// Update the post into the database
|
||||
if ( wp_update_post( $args ) ) {
|
||||
$this->date_submitted = $date;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update our date modified
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_date_modified( $date ) {
|
||||
$args = array(
|
||||
'ID' => $this->sub_id,
|
||||
'post_modified' => $date,
|
||||
'post_modified_gmt' => get_gmt_from_date( $date ),
|
||||
);
|
||||
|
||||
// Update the post into the database
|
||||
if ( wp_update_post( $args ) ) {
|
||||
$this->date_modified = $date;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a meta value to our submission.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function add_meta( $meta_key, $value ) {
|
||||
if ( update_post_meta( $this->sub_id, $meta_key, $value ) ) {
|
||||
$this->meta[ $meta_key ] = $value;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a meta value.
|
||||
* Wrapper for add_field().
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_meta( $meta_key, $value ) {
|
||||
return $this->add_meta( $meta_key, $value );
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a meta value.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9
|
||||
* @return bool
|
||||
*/
|
||||
public function delete_meta( $meta_key, $value = '' ) {
|
||||
if ( empty( $value ) ) {
|
||||
return delete_post_meta( $this->sub_id, $meta_key );
|
||||
} else {
|
||||
return delete_post_meta( $this->sub_id, $meta_key, $value );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a field value to our submission.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function add_field( $field_id, $value ) {
|
||||
$meta_key = '_field_' . $field_id;
|
||||
if ( update_post_meta( $this->sub_id, $meta_key, $value ) ) {
|
||||
$this->field[ $field_id ] = $value;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a field value
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return bool
|
||||
*/
|
||||
public function update_field( $field_id, $value ) {
|
||||
return $this->add_field( $field_id, $value );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a meta value from our submission by meta key
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return array|bool
|
||||
*/
|
||||
public function get_meta( $meta_key ) {
|
||||
if ( ! isset ( $this->meta[ $meta_key ] ) ) {
|
||||
$this->meta[ $meta_key ] = get_post_meta( $this->sub_id, $meta_key, true );
|
||||
}
|
||||
|
||||
return $this->meta[ $meta_key ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a field value from our submission by field id
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return array|bool
|
||||
*/
|
||||
public function get_field( $field_id ) {
|
||||
if ( isset ( $this->fields[ $field_id ] ) ) {
|
||||
return $this->fields[ $field_id ];
|
||||
} else {
|
||||
return get_post_meta( $this->sub_id, '_field_' . $field_id, true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a submission from the database, returning all the field data.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return array $sub
|
||||
*/
|
||||
public function get_all_fields() {
|
||||
if ( empty ( $this->fields ) ) {
|
||||
$this->retrieve_fields();
|
||||
}
|
||||
return $this->fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a submission sequential ID by the post ID.
|
||||
* This function puts together the prefix, sequential number, and postfix
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return string $seq_num
|
||||
*/
|
||||
public function get_seq_num() {
|
||||
return apply_filters( 'nf_subs_seq_num', $this->seq_num, $this->sub_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Export our current submission.
|
||||
*
|
||||
* @access public
|
||||
* @param array $sub_ids
|
||||
* @param bool @return
|
||||
* @since 2.7
|
||||
* @return void
|
||||
*/
|
||||
public function export( $return = false ){
|
||||
if ( $return ) {
|
||||
return Ninja_Forms()->subs()->export( $this->sub_id, $return );
|
||||
} else {
|
||||
Ninja_Forms()->subs()->export( $this->sub_id, $return );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this submission
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return void
|
||||
*/
|
||||
public function delete() {
|
||||
wp_delete_post( $this->sub_id, true );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,283 +0,0 @@
|
|||
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
/**
|
||||
* Submissions.
|
||||
* This class handles creating and exporting submissions.
|
||||
*
|
||||
* @package Ninja Forms
|
||||
* @subpackage Classes/Submissions
|
||||
* @copyright Copyright (c) 2014, WPNINJAS
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.7
|
||||
*/
|
||||
|
||||
class NF_Subs {
|
||||
|
||||
/**
|
||||
* Get things started
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return void/
|
||||
*/
|
||||
public function __construct() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a submission.
|
||||
*
|
||||
* @access public
|
||||
* @since 2.7
|
||||
* @return int $sub_id
|
||||
*/
|
||||
public function create( $form_id = '' ) {
|
||||
// Create Submission
|
||||
$post = array(
|
||||
'post_status' => 'publish',
|
||||
'post_type' => 'nf_sub'
|
||||
);
|
||||
$sub_id = wp_insert_post( $post );
|
||||
|
||||
// Add our form ID to the submission
|
||||
Ninja_Forms()->sub( $sub_id )->update_form_id( $form_id );
|
||||
|
||||
// Get the current sequential ID
|
||||
$last_sub = Ninja_Forms()->form( $form_id )->get_setting( 'last_sub', true );
|
||||
$seq_num = ! empty ( $last_sub ) ? $last_sub + 1 : 1;
|
||||
|
||||
$seq_num = apply_filters( 'nf_sub_seq_num', $seq_num, $form_id );
|
||||
|
||||
// Add the sequential ID to the post meta
|
||||
Ninja_Forms()->sub( $sub_id )->update_seq_num( $seq_num );
|
||||
|
||||
// Update our form data with the new "last seq id."
|
||||
Ninja_Forms()->form( $form_id )->update_setting( 'last_sub', $seq_num );
|
||||
|
||||
// Update our sub count
|
||||
Ninja_Forms()->form( $form_id )->sub_count = $seq_num - 1;
|
||||
|
||||
return $sub_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get submissions based on specific critera.
|
||||
*
|
||||
* @since 2.7
|
||||
* @param array $args
|
||||
* @return array $sub_ids
|
||||
*/
|
||||
public function get( $args = array() ) {
|
||||
|
||||
$query_args = array(
|
||||
'post_type' => 'nf_sub',
|
||||
'posts_per_page' => -1,
|
||||
'date_query' => array(
|
||||
'inclusive' => true,
|
||||
),
|
||||
);
|
||||
|
||||
if( isset( $args['form_id'] ) ) {
|
||||
$query_args['meta_query'][] = array(
|
||||
'key' => '_form_id',
|
||||
'value' => $args['form_id'],
|
||||
);
|
||||
}
|
||||
|
||||
if( isset( $args['seq_num'] ) ) {
|
||||
$query_args['meta_query'][] = array(
|
||||
'key' => '_seq_num',
|
||||
'value' => $args['seq_num'],
|
||||
);
|
||||
}
|
||||
|
||||
if( isset( $args['user_id'] ) ) {
|
||||
$query_args['author'] = $args['user_id'];
|
||||
}
|
||||
|
||||
if( isset( $args['action'])){
|
||||
$query_args['meta_query'][] = array(
|
||||
'key' => '_action',
|
||||
'value' => $args['action'],
|
||||
);
|
||||
}
|
||||
|
||||
if ( isset ( $args['meta'] ) ) {
|
||||
foreach ( $args['meta'] as $key => $value ) {
|
||||
$query_args['meta_query'][] = array(
|
||||
'key' => $key,
|
||||
'value' => $value,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ( isset ( $args['fields'] ) ) {
|
||||
foreach ( $args['fields'] as $field_id => $value ) {
|
||||
$query_args['meta_query'][] = array(
|
||||
'key' => '_field_' . $field_id,
|
||||
'value' => $value,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if( isset( $args['begin_date'] ) AND $args['begin_date'] != '') {
|
||||
$query_args['date_query']['after'] = nf_get_begin_date( $args['begin_date'] )->format("Y-m-d G:i:s");
|
||||
}
|
||||
|
||||
if( isset( $args['end_date'] ) AND $args['end_date'] != '' ) {
|
||||
$query_args['date_query']['before'] = nf_get_end_date( $args['end_date'] )->format("Y-m-d G:i:s");
|
||||
}
|
||||
|
||||
$subs = new WP_Query( $query_args );;
|
||||
|
||||
$sub_objects = array();
|
||||
|
||||
if ( is_array( $subs->posts ) && ! empty( $subs->posts ) ) {
|
||||
foreach ( $subs->posts as $sub ) {
|
||||
$sub_objects[] = Ninja_Forms()->sub( $sub->ID );
|
||||
}
|
||||
}
|
||||
|
||||
wp_reset_postdata();
|
||||
return $sub_objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Export submissions.
|
||||
*
|
||||
* @access public
|
||||
* @param array $sub_ids
|
||||
* @param bool @return
|
||||
* @since 2.7
|
||||
* @return void
|
||||
*/
|
||||
public function export( $sub_ids = '', $return = false ){
|
||||
global $ninja_forms_fields;
|
||||
|
||||
// Bail if we haven't been sent any IDs.
|
||||
if ( empty( $sub_ids ) )
|
||||
return false;
|
||||
|
||||
if ( ! is_array( $sub_ids ) )
|
||||
$sub_ids = array( $sub_ids );
|
||||
|
||||
$plugin_settings = nf_get_settings();
|
||||
$date_format = $plugin_settings['date_format'];
|
||||
|
||||
$label_array = array();
|
||||
// Get our Form ID.
|
||||
$form_id = Ninja_Forms()->sub( $sub_ids[0] )->form_id;
|
||||
|
||||
// Get our list of fields.
|
||||
$fields = Ninja_Forms()->form( $form_id )->fields;
|
||||
|
||||
// Add our sequential number.
|
||||
$label_array[0]['_seq_num'] = __( '#', 'ninja-forms' );
|
||||
|
||||
// Add our "Date" label.
|
||||
$label_array[0]['_date_submitted'] = __( 'Date Submitted', 'ninja-forms' );
|
||||
|
||||
$label_array = apply_filters( 'nf_subs_csv_label_array_before_fields', $label_array, $sub_ids );
|
||||
|
||||
foreach ( $fields as $field_id => $field ) {
|
||||
// Get our field type
|
||||
$field_type = $field['type'];
|
||||
// Check to see if our field type has been set as a "process_field".
|
||||
if ( isset ( $ninja_forms_fields[ $field_type ] ) ) {
|
||||
$reg_field = $ninja_forms_fields[ $field_type ];
|
||||
$process_field = $reg_field['process_field'];
|
||||
} else {
|
||||
$process_field = false;
|
||||
}
|
||||
|
||||
// If this field's "process_field" is set to true, then add its label to the array.
|
||||
if ( $process_field ) {
|
||||
if ( isset ( $field['data']['admin_label'] ) && $field['data']['admin_label'] != '' ) {
|
||||
$label = $field['data']['admin_label'];
|
||||
} else if( isset ( $field['data']['label'] ) ) {
|
||||
$label = $field['data']['label'];
|
||||
}else{
|
||||
$label = '';
|
||||
}
|
||||
|
||||
$label_array[0][ $field_id ] = apply_filters( 'nf_subs_csv_field_label', $label, $field_id );
|
||||
}
|
||||
}
|
||||
|
||||
$label_array = ninja_forms_stripslashes_deep( $label_array );
|
||||
$label_array = apply_filters( 'nf_subs_csv_label_array', $label_array, $sub_ids );
|
||||
|
||||
$value_array = array();
|
||||
$x = 0;
|
||||
// Loop through our submissions and create a new row for each one.
|
||||
foreach ( $sub_ids as $sub_id ) {
|
||||
foreach ( $label_array[0] as $field_id => $label ) {
|
||||
// Make sure we aren't working with our date field, which will always have a field id of 0.
|
||||
if ( $field_id !== 0 ) {
|
||||
// Check to see if our field_id is numeric. If it isn't, then we're working with meta, not a field.
|
||||
if ( is_numeric( $field_id ) ) {
|
||||
// We're working with a field, grab the value.
|
||||
$user_value = Ninja_Forms()->sub( $sub_id )->get_field( $field_id );
|
||||
} else if ( '_date_submitted' == $field_id ) {
|
||||
// Get the date of our submission.
|
||||
$date = strtotime( Ninja_Forms()->sub( $sub_id )->date_submitted );
|
||||
// The first item is our date field.
|
||||
$user_value = date( $date_format, $date );
|
||||
} else if ( '_seq_num' == $field_id ) {
|
||||
$user_value = Ninja_Forms()->sub( $sub_id )->get_seq_num();
|
||||
} else {
|
||||
// We're working with a piece of meta, grabe the value.
|
||||
$user_value = Ninja_Forms()->sub( $sub_id )->get_meta( $field_id );
|
||||
}
|
||||
|
||||
// Run our value through the appropriate filters before we flatten any arrays.
|
||||
$user_value = apply_filters( 'nf_subs_export_pre_value', $user_value, $field_id );
|
||||
|
||||
// Implode any arrays we might have.
|
||||
if ( is_array( $user_value ) ) {
|
||||
$user_value = implode( ',', $user_value );
|
||||
}
|
||||
|
||||
// Add an ' to the beginning = sign to prevent any CSV/Excel security issues.
|
||||
if ( strpos( $user_value, '=' ) === 0 ) {
|
||||
$user_value = "'" . $user_value;
|
||||
}
|
||||
|
||||
// Run our final value through the appropriate filters and assign it to the array.
|
||||
$value_array[ $x ][ $field_id ] = htmlspecialchars_decode( apply_filters( 'nf_subs_csv_field_value', $user_value, $field_id ), ENT_QUOTES );
|
||||
}
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
|
||||
$value_array = ninja_forms_stripslashes_deep( $value_array );
|
||||
$value_array = apply_filters( 'nf_subs_csv_value_array', $value_array, $sub_ids );
|
||||
|
||||
$array = array( $label_array, $value_array );
|
||||
$today = date( $date_format, current_time( 'timestamp' ) );
|
||||
$filename = apply_filters( 'nf_subs_csv_filename', 'nf_subs_' . $today );
|
||||
$filename = $filename . ".csv";
|
||||
|
||||
if( $return ){
|
||||
return str_putcsv( $array,
|
||||
apply_filters( 'nf_sub_csv_delimiter', ',' ),
|
||||
apply_filters( 'nf_sub_csv_enclosure', '"' ),
|
||||
apply_filters( 'nf_sub_csv_terminator', "\n" )
|
||||
);
|
||||
}else{
|
||||
header( 'Content-type: application/csv');
|
||||
header( 'Content-Disposition: attachment; filename="'.$filename .'"' );
|
||||
header( 'Pragma: no-cache');
|
||||
header( 'Expires: 0' );
|
||||
echo apply_filters( 'nf_sub_csv_bom',"\xEF\xBB\xBF" ) ; // Byte Order Mark
|
||||
echo str_putcsv( $array,
|
||||
apply_filters( 'nf_sub_csv_delimiter', ',' ),
|
||||
apply_filters( 'nf_sub_csv_enclosure', '"' ),
|
||||
apply_filters( 'nf_sub_csv_terminator', "\n" )
|
||||
);
|
||||
|
||||
die();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'ninjaforms';
|
||||
src: url('../fonts/ninjaforms.eot');
|
||||
src: local('☺'), url('../fonts/ninjaforms.woff') format('woff'), url('../fonts/ninjaforms.ttf') format('truetype'), url('../fonts/ninjaforms.svg') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* dashboard icon */
|
||||
#toplevel_page_ninja-forms .wp-menu-image img {
|
||||
display: none;
|
||||
}
|
||||
#toplevel_page_ninja-forms .wp-menu-image:before {
|
||||
font-family: 'ninjaforms'!important; /* this assumes you've loaded Genericons in your admin */
|
||||
content: 'a'; /* replace this with your icon */
|
||||
font-size: 20px;
|
||||
position: relative;
|
||||
left: 5px; /* positions the icon */
|
||||
top: 4px; /* positions the icon */
|
||||
color: #aaa;
|
||||
}
|
||||
.branch-3-8 #toplevel_page_ninja-forms .wp-menu-image:before,
|
||||
.branch-3-9 #toplevel_page_ninja-forms .wp-menu-image:before {
|
||||
left: 0; /* positions the icon */
|
||||
top: 0; /* positions the icon */
|
||||
}
|
||||
#toplevel_page_ninja-forms:hover .wp-menu-image:before, .wp-has-current-submenu#toplevel_page_ninja-forms .wp-menu-image:before {
|
||||
color: #21759b;
|
||||
}
|
||||
div#icon-edit.icon32-posts-book-review {
|
||||
background-image: none;
|
||||
}
|
||||
div#icon-edit.icon32-posts-book-review:after {
|
||||
font-family: 'ninjaforms'!important;
|
||||
content: 'a'; /* replace this with your icon */
|
||||
color: #555;
|
||||
font-size: 32px;
|
||||
position: relative;
|
||||
top: -5px; /* positions the icon */
|
||||
left: 5px; /* positions the icon */
|
||||
}
|
||||
|
||||
/* this adds support for MP6 & future WP (3.7/8, whichever gets the dashboard css update) */
|
||||
/* this is largely thanks to: https://github.com/Gizburdt/Wordpress-Cuztom-Helper/issues/152#issuecomment-17490472 */
|
||||
.mp6 #adminmenu #toplevel_page_ninja-forms div.wp-menu-image:before {
|
||||
font-family: 'ninjaforms'!important;
|
||||
content: 'a'; /* replace this with your icon */
|
||||
left: 0; /* resets the positioning for MP6/future WP */
|
||||
top: 0; /* resets the positioning for MP6/future WP */
|
||||
text-shadow: none;
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
/* jQuery.Rating Plugin CSS - http://www.fyneworks.com/jquery/star-rating/ */
|
||||
.rating-cancel,
|
||||
.ninja-forms-star-rating {
|
||||
float: left;
|
||||
text-indent: -999em;
|
||||
}
|
||||
.rating-cancel,
|
||||
.rating-cancel a {
|
||||
background: url(../images/delete.gif) no-repeat 0 -16px
|
||||
}
|
||||
.ninja-forms-star-rating a {
|
||||
background: url(../images/star.gif) no-repeat 0 0px
|
||||
}
|
||||
.rating-cancel a,
|
||||
.ninja-forms-star-rating a {
|
||||
background-position: 0 0px;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
margin-right: 2px;
|
||||
width: 17px;
|
||||
height: 15px;
|
||||
overflow: hidden
|
||||
}
|
||||
.ninja-forms-star-rating-on a {
|
||||
background-position: 0 -16px;
|
||||
}
|
||||
.ninja-forms-star-rating-hover a {
|
||||
background-position: 0 -32px
|
||||
}
|
||||
.rating-cancel a:hover {
|
||||
background-position: 0 -32px
|
||||
}
|
||||
/* Read Only CSS */
|
||||
.ninja-forms-star-rating-readonly a {
|
||||
cursor: default !important;
|
||||
}
|
||||
/* Partial Star CSS */
|
||||
.ninja-forms-star-rating {
|
||||
background: transparent !important;
|
||||
overflow: hidden!important
|
||||
}
|
||||
/* END jQuery.Rating Plugin CSS */
|
||||
|
||||
.ninja-forms-star-rating-control {
|
||||
display: inline-block;
|
||||
}
|
||||
.ninja-forms-star-rating-control:after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
}
|
||||
|
|
@ -1,962 +0,0 @@
|
|||
/* ---------------------------------
|
||||
/ Generic styles & classes
|
||||
----------------------------------*/
|
||||
.nf-box {
|
||||
background: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* ---------------------------------
|
||||
/ Styles for specific admin pages
|
||||
----------------------------------*/
|
||||
|
||||
.no-padding {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
div.field-wrap.list-wrap {
|
||||
display: block;
|
||||
}
|
||||
#wpwrap:after {
|
||||
content: "";
|
||||
clear: both;
|
||||
display: table;
|
||||
}
|
||||
.ninja-forms-save-data {
|
||||
clear: both;
|
||||
float: none;
|
||||
}
|
||||
#nav-menus-frame .ninja-forms-new-field,
|
||||
#nav-menus-frame .ninja-forms-insert-def-field,
|
||||
#nav-menus-frame .ninja-forms-insert-fav-field {
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
a.ninja-forms-field-add-fav {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
a.ninja-forms-field-add-fav:hover span:before {
|
||||
content: "\f155";
|
||||
}
|
||||
|
||||
a.ninja-forms-field-add-fav span:before {
|
||||
content: "\f154";
|
||||
}
|
||||
|
||||
a.ninja-forms-field-remove-fav {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
a.ninja-forms-field-remove-fav:hover span:before {
|
||||
content: "\f154";
|
||||
}
|
||||
|
||||
a.ninja-forms-field-remove-fav span:before {
|
||||
content: "\f155";
|
||||
}
|
||||
|
||||
#editor-toolbar #edButtonHTML, #ed_toolbar, #edButtonPreview {
|
||||
display: none;
|
||||
}
|
||||
#menu-management-liquid #menu-management .menu-edit,
|
||||
#menu-management-liquid #menu-management #nav-menu-header,
|
||||
#menu-management-liquid #menu-management #nav-menu-footer,
|
||||
#menu-management-liquid #menu-management .menu-item-settings {
|
||||
border-color: #DFDFDF;
|
||||
margin: 0;
|
||||
}
|
||||
.nav-menus-php #post-body-content {
|
||||
float: left;
|
||||
}
|
||||
#post-body-content .description{
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#post-body-content .description-wide{
|
||||
width: 500px;
|
||||
}
|
||||
#post-body-content .description-thin{
|
||||
width: 240px;
|
||||
}
|
||||
#post-body-content .menu-item-handle{
|
||||
width: 510px;
|
||||
}
|
||||
#post-body-content .menu-item-settings{
|
||||
width: 500px;
|
||||
padding: 10px;
|
||||
}
|
||||
#post-body-content .checkbox {
|
||||
background: none;
|
||||
}
|
||||
.postbox {
|
||||
margin: 5px 0;
|
||||
}
|
||||
.postbox .inside, .stuffbox .inside {
|
||||
padding: 5px 10px 10px;
|
||||
}
|
||||
.postbox .inside::after, .stuffbox .inside::after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
}
|
||||
#menu-settings-column .button-controls {
|
||||
clear: none;
|
||||
float: left;
|
||||
width: 46%;
|
||||
margin: 0 2% 3px 2% !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#menu-settings-column .button-controls a.button {
|
||||
/*border: 1px solid #999;
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;*/
|
||||
text-align: center;
|
||||
width: 96%;
|
||||
}
|
||||
|
||||
#menu-settings-column .field-controls {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ninja-forms-field-list-options {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.list-options {
|
||||
background: #fcfcfc;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 2px 10px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#field-info {
|
||||
padding-top:10px;
|
||||
width: 100%;
|
||||
}
|
||||
.nf-preview {
|
||||
margin-left: 10px !important;
|
||||
}
|
||||
.nav-menus-php .item-edit {
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
#side-sortables .item-edit {
|
||||
color: #fff;
|
||||
top: -4px;
|
||||
}
|
||||
#side-sortables .item-edit::before {
|
||||
color: #ccc !important;
|
||||
}
|
||||
#ninja_forms_admin_metaboxes .item-edit {
|
||||
top: -4px;
|
||||
text-indent: -9999px;
|
||||
}
|
||||
#ninja_forms_admin_metaboxes .item-edit::before {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 10px;
|
||||
}
|
||||
#ninja_forms_admin_metaboxes textarea {
|
||||
min-height: 100px;
|
||||
padding: 5px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.menu-item-settings.list li {
|
||||
display:block;
|
||||
}
|
||||
.ninja_error {
|
||||
border: 1px solid red;
|
||||
}
|
||||
.widefat {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.wrap-left {
|
||||
float: left;
|
||||
width: 60%;
|
||||
}
|
||||
.wrap-right {
|
||||
background: #464646;
|
||||
color: #fff;
|
||||
float: right;
|
||||
margin: 0 auto;
|
||||
padding: 10px;
|
||||
width: 263px;
|
||||
}
|
||||
.wrap-right img {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.wrap-right h2 {
|
||||
color: #fff;
|
||||
text-shadow: black 0 1px 0;
|
||||
}
|
||||
.wrap-right ul {
|
||||
background: #fff;
|
||||
color: #333;
|
||||
list-style: disc;
|
||||
list-style-position: inside;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.form-section {
|
||||
background: #F4F4F4;
|
||||
border: 1px solid #DFDFDF;
|
||||
margin-bottom: 10px;
|
||||
padding: 20px;
|
||||
}
|
||||
#plugin_settings_upload_size {
|
||||
text-align:right;
|
||||
}
|
||||
#icon-ninja-custom-forms {
|
||||
background-image: url('../images/wpnj-ninja-head.png') !important;
|
||||
}
|
||||
|
||||
#poststuff {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#poststuff .ninja-forms-field-list .inside {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#poststuff #post-body {
|
||||
border: 0;
|
||||
}
|
||||
#poststuff h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.forms_page_ninja-forms-subs #poststuff {
|
||||
float: left;
|
||||
}
|
||||
.menu {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
#poststuff h3.section-title {
|
||||
background: #F4F4F4;
|
||||
border-style: solid;
|
||||
border-color: #DFDFDF #DFDFDF white;
|
||||
border-width: 1px 1px 0;
|
||||
color: #AAA;
|
||||
text-shadow: rgba(255, 255, 255, 1) 0 1px 0;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
display: inline-block;
|
||||
padding: 4px 14px 6px;
|
||||
text-decoration: none;
|
||||
margin: 0 6px -1px 0;
|
||||
-moz-border-radius: 3px 3px 0 0;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
-webkit-border-top-right-radius: 3px;
|
||||
-khtml-border-top-left-radius: 3px;
|
||||
-khtml-border-top-right-radius: 3px;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
|
||||
#layout-elements {
|
||||
background-color: whiteSmoke;
|
||||
border-color: #444;
|
||||
-moz-box-shadow: inset 0 1px 0 #666666;
|
||||
-webkit-box-shadow: inset 0 1px 0 #666666;
|
||||
box-shadow: inset 0 1px 0 #666666;
|
||||
-moz-border-radius: 3px;
|
||||
-khtml-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#layout-elements h3 {
|
||||
background-color: #777777;
|
||||
background-image: -ms-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: -moz-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: -o-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: -webkit-gradient(linear,left bottom,left top,from(#666666),to(#777777));
|
||||
background-image: -webkit-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: linear-gradient(bottom,#666666,#777777);
|
||||
border-bottom-color: #444;
|
||||
-moz-box-shadow: inset 0 1px 0 #777777;
|
||||
-webkit-box-shadow: inset 0 1px 0 #777777;
|
||||
box-shadow: inset 0 1px 0 #777777;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
|
||||
.menu-item-handle.heading,
|
||||
.menu-item-handle.desc,
|
||||
.menu-item-handle.hr {
|
||||
background-color: #777777;
|
||||
background-image: -ms-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: -moz-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: -o-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: -webkit-gradient(linear,left bottom,left top,from(#666666),to(#777777));
|
||||
background-image: -webkit-linear-gradient(bottom,#666666,#777777);
|
||||
background-image: linear-gradient(bottom,#666666,#777777);
|
||||
border: 1px solid #444;
|
||||
-moz-box-shadow: inset 0 1px 0 #999;
|
||||
-webkit-box-shadow: inset 0 1px 0 #999;
|
||||
box-shadow: inset 0 1px 0 #999;
|
||||
}
|
||||
.menu-item-handle.heading .item-title,
|
||||
.menu-item-handle.desc .item-title,
|
||||
.menu-item-handle.hr .item-title {
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
padding: 7px 0;
|
||||
line-height: 20px;
|
||||
display: block;
|
||||
margin-right: 13em;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-handle.heading .item-controls,
|
||||
.menu-item-handle.desc .item-controls,
|
||||
.menu-item-handle.hr .item-controls {
|
||||
color: #eee;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: -1px;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-handle.heading .item-type,
|
||||
.menu-item-handle.desc .item-type,
|
||||
.menu-item-handle.hr .item-type {
|
||||
color: #eee;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-settings.heading,
|
||||
.menu-item-settings.desc,
|
||||
.menu-item-settings.hr {
|
||||
background-color: whiteSmoke;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
|
||||
#multi-part {
|
||||
background-color: whiteSmoke;
|
||||
border-color: #a23511;
|
||||
-moz-box-shadow: inset 0 1px 0 #b94119;
|
||||
-webkit-box-shadow: inset 0 1px 0 #b94119;
|
||||
box-shadow: inset 0 1px 0 #b94119;
|
||||
-moz-border-radius: 3px;
|
||||
-khtml-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#multi-part h3 {
|
||||
background-color: #d54e21;
|
||||
background-image: -ms-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: -moz-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: -o-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: -webkit-gradient(linear,left bottom,left top,from(#b94119),to(#d54e21));
|
||||
background-image: -webkit-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: linear-gradient(bottom,#b94119,#d54e21);
|
||||
border-bottom-color: #a23511;
|
||||
-moz-box-shadow: inset 0 1px 0 #d54e21;
|
||||
-webkit-box-shadow: inset 0 1px 0 #d54e21;
|
||||
box-shadow: inset 0 1px 0 #d54e21;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
#multi-part .howto, #multi-part label, #multi-part .button-controls {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.menu-item-handle.steps,
|
||||
.menu-item-handle.progressbar,
|
||||
.menu-item-handle.divider {
|
||||
background-color: #d54e21;
|
||||
background-image: -ms-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: -moz-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: -o-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: -webkit-gradient(linear,left bottom,left top,from(#b94119),to(#d54e21));
|
||||
background-image: -webkit-linear-gradient(bottom,#b94119,#d54e21);
|
||||
background-image: linear-gradient(bottom,#b94119,#d54e21);
|
||||
border: 1px solid #a23511;
|
||||
-moz-box-shadow: inset 0 1px 0 #eb5e2f;
|
||||
-webkit-box-shadow: inset 0 1px 0 #eb5e2f;
|
||||
box-shadow: inset 0 1px 0 #eb5e2f;
|
||||
}
|
||||
.menu-item-handle.steps .item-title,
|
||||
.menu-item-handle.progressbar .item-title,
|
||||
.menu-item-handle.divider .item-title {
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
padding: 7px 0;
|
||||
line-height: 20px;
|
||||
display: block;
|
||||
margin-right: 13em;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-handle.steps .item-controls,
|
||||
.menu-item-handle.progressbar .item-controls,
|
||||
.menu-item-handle.divider .item-controls {
|
||||
color: #eee;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: -1px;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-handle.steps .item-type,
|
||||
.menu-item-handle.progressbar .item-type,
|
||||
.menu-item-handle.divider .item-type {
|
||||
color: #eee;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-settings.steps,
|
||||
.menu-item-settings.progressbar,
|
||||
.menu-item-settings.divider {
|
||||
background-color: whiteSmoke;
|
||||
border: 1px solid #a23511;
|
||||
}
|
||||
|
||||
#defined-fields {
|
||||
background-color: whiteSmoke;
|
||||
border-color: #12516e;
|
||||
-moz-box-shadow: inset 0 1px 0 #1a6485;
|
||||
-webkit-box-shadow: inset 0 1px 0 #1a6485;
|
||||
box-shadow: inset 0 1px 0 #1a6485;
|
||||
-moz-border-radius: 3px;
|
||||
-khtml-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#defined-fields h3 {
|
||||
background-color: #21759b;
|
||||
background-image: -ms-linear-gradient(bottom,#1a6485,#21759b);
|
||||
background-image: -moz-linear-gradient(bottom,#1a6485,#21759b);
|
||||
background-image: -o-linear-gradient(bottom,#1a6485,#d54e21);
|
||||
background-image: -webkit-gradient(linear,left bottom,left top,from(#1a6485),to(#21759b));
|
||||
background-image: -webkit-linear-gradient(bottom,#1a6485,#21759b);
|
||||
background-image: linear-gradient(bottom,#1a6485,#21759b);
|
||||
border-bottom-color: #12516e;
|
||||
-moz-box-shadow: inset 0 1px 0 #21759b;
|
||||
-webkit-box-shadow: inset 0 1px 0 #21759b;
|
||||
box-shadow: inset 0 1px 0 #21759b;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
#defined-fields .howto, #defined-fields label, #defined-fields .button-controls {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.menu-item-handle.spam,
|
||||
.menu-item-handle.submitbutton {
|
||||
background-color: #21759b;
|
||||
background-image: -ms-linear-gradient(bottom,#1a6485,#21759b);
|
||||
background-image: -moz-linear-gradient(bottom,#1a6485,#21759b);
|
||||
background-image: -o-linear-gradient(bottom,#1a6485,#d54e21);
|
||||
background-image: -webkit-gradient(linear,left bottom,left top,from(#1a6485),to(#21759b));
|
||||
background-image: -webkit-linear-gradient(bottom,#1a6485,#21759b);
|
||||
background-image: linear-gradient(bottom,#1a6485,#21759b);
|
||||
border: 1px solid #12516e;
|
||||
-moz-box-shadow: inset 0 1px 0 #3593bd;
|
||||
-webkit-box-shadow: inset 0 1px 0 #3593bd;
|
||||
box-shadow: inset 0 1px 0 #3593bd;
|
||||
}
|
||||
.menu-item-handle.spam .item-title,
|
||||
.menu-item-handle.submitbutton .item-title {
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
padding: 7px 0;
|
||||
line-height: 20px;
|
||||
display: block;
|
||||
margin-right: 13em;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-handle.spam .item-controls,
|
||||
.menu-item-handle.submitbutton .item-controls {
|
||||
color: #eee;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: -1px;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-handle.spam .item-type,
|
||||
.menu-item-handle.submitbutton .item-type {
|
||||
color: #eee;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
.menu-item-settings.spam,
|
||||
.menu-item-settings.submitbutton {
|
||||
background-color: whiteSmoke;
|
||||
border: 1px solid #12516e;
|
||||
}
|
||||
|
||||
#post-elements {
|
||||
background-color: whiteSmoke;
|
||||
border-color: #83acd0;
|
||||
-moz-box-shadow: inset 0 1px 0 #e6f3fe;
|
||||
-webkit-box-shadow: inset 0 1px 0 #e6f3fe;
|
||||
box-shadow: inset 0 1px 0 #e6f3fe;
|
||||
-moz-border-radius: 3px;
|
||||
-khtml-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#post-elements h3 {
|
||||
background-color: #D3E7F8;
|
||||
background-image: -ms-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: -moz-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: -o-linear-gradient(top,#e6f3fe,#d54e21);
|
||||
background-image: -webkit-gradient(linear,left top,left bottom,from(#e6f3fe),to(#D3E7F8));
|
||||
background-image: -webkit-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
border-bottom-color: #a1caec;
|
||||
color: #464646;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
#post-elements .howto, #post-elements label, #post-elements .button-controls {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.menu-item-handle.posttitle,
|
||||
.menu-item-handle.postcontent,
|
||||
.menu-item-handle.postexcerpt,
|
||||
.menu-item-handle.postcat,
|
||||
.menu-item-handle.posttags {
|
||||
background-color: #D3E7F8;
|
||||
background-image: -ms-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: -moz-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: -o-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: -webkit-gradient(linear,left top,left bottom,from(#e6f3fe),to(#D3E7F8));
|
||||
background-image: -webkit-linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
background-image: linear-gradient(top,#e6f3fe,#D3E7F8);
|
||||
border: 1px solid #8ab5d9;
|
||||
}
|
||||
.menu-item-handle.posttitle .item-title,
|
||||
.menu-item-handle.postcontent .item-title,
|
||||
.menu-item-handle.postexcerpt .item-title,
|
||||
.menu-item-handle.postcategory .item-title,
|
||||
.menu-item-handle.posttags .item-title {
|
||||
color: #464646;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
padding: 7px 0;
|
||||
line-height: 20px;
|
||||
display: block;
|
||||
margin-right: 13em;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
.menu-item-handle.posttitle .item-controls,
|
||||
.menu-item-handle.postcontent .item-controls,
|
||||
.menu-item-handle.postexcerpt .item-controls,
|
||||
.menu-item-handle.postcategory .item-controls,
|
||||
.menu-item-handle.posttags .item-controls {
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: -1px;
|
||||
}
|
||||
.menu-item-handle.posttitle .item-type,
|
||||
.menu-item-handle.postcontent .item-type,
|
||||
.menu-item-handle.postexcerpt .item-type,
|
||||
.menu-item-handle.postcategory .item-type,
|
||||
.menu-item-handle.posttags .item-type {
|
||||
color: #999;
|
||||
}
|
||||
.menu-item-settings.posttitle,
|
||||
.menu-item-settings.postcontent,
|
||||
.menu-item-settings.postexcerpt,
|
||||
.menu-item-settings.postcategory,
|
||||
.menu-item-settings.posttags {
|
||||
background-color: whiteSmoke;
|
||||
border: 1px solid #83acd0;
|
||||
}
|
||||
|
||||
.form-list-inactive {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
.ninja-forms-drag {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
ul.ninja-forms-field-list, ul.ninja-forms-field-list ul {
|
||||
margin: 0 0 0 25px;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
ul.ninja-forms-field-list {
|
||||
margin: 1em 0;
|
||||
}
|
||||
li.test {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
a.tooltip {outline:none; }
|
||||
a.tooltip strong {line-height:30px;}
|
||||
a.tooltip:hover {text-decoration:none;}
|
||||
a.tooltip span {
|
||||
z-index:10;display:none; padding:14px 20px;
|
||||
margin-top:-30px; margin-left:28px;
|
||||
width:240px; line-height:16px;
|
||||
}
|
||||
a.tooltip:hover span{
|
||||
display:inline; position:absolute; color:#111;
|
||||
border:1px solid #DCA; background:#fffAF0;}
|
||||
.callout {z-index:20;position:absolute;top:30px;border:0;left:-12px;}
|
||||
|
||||
/*CSS3 extras*/
|
||||
a.tooltip span
|
||||
{
|
||||
border-radius:4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
|
||||
-moz-box-shadow: 5px 5px 8px #CCC;
|
||||
-webkit-box-shadow: 5px 5px 8px #CCC;
|
||||
box-shadow: 5px 5px 8px #CCC;
|
||||
}
|
||||
|
||||
.nf-brand-header {
|
||||
background: #EF4748;
|
||||
border-left: 4px solid #424242;
|
||||
}
|
||||
.nf-brand-header:after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
|
||||
}
|
||||
.nf-brand-header .nf-logo {
|
||||
background-image: url("https://ninjaforms.com/wp-content/themes/ninja-brand/images/ninja-forms-logo-header.png");
|
||||
background-size: 410px 600px;
|
||||
background-position: 40px 80px;
|
||||
float: left;
|
||||
height: 80px;
|
||||
width: 410px;
|
||||
}
|
||||
.nf-brand-header .wpn-logo {
|
||||
background: #fff;
|
||||
background-image: url("../images/wpninjas-logo.png");
|
||||
background-size: 83px 70px;
|
||||
background-position: 0 10px;
|
||||
background-repeat: no-repeat;
|
||||
float: right;
|
||||
font-size: 8px;
|
||||
height: 80px;
|
||||
width: 83px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
.nf-extend {
|
||||
float: left;
|
||||
margin: 0 20px 20px 0;
|
||||
width: 300px;
|
||||
position: relative;
|
||||
}
|
||||
.nf-extend img {
|
||||
margin-bottom: 10px;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.nf-extend-content p {
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
.nf-extend .nf-button {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.nf-extend .nf-doc-button {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.mp6 .nf-extend {
|
||||
background: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
float: left;
|
||||
margin: 0 20px 20px 0;
|
||||
padding: 10px;
|
||||
position: relative;
|
||||
width: 300px;
|
||||
height: 350px;
|
||||
}
|
||||
.branch-3-8 .nf-extend {
|
||||
background: #fff;
|
||||
}
|
||||
.forms_page_ninja-forms-style h2 .nav-tab {
|
||||
font-size: 16px;
|
||||
}
|
||||
#TB_window {
|
||||
overflow: auto !important;
|
||||
}
|
||||
.list-import-textarea {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.ninja-forms-list-option-label-td input {
|
||||
width: 170px;
|
||||
}
|
||||
.ninja-forms-list-option-value-td input {
|
||||
width: 100px;
|
||||
}
|
||||
.ninja-forms-list-option-calc-td input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.ninja-forms-calculations .label {
|
||||
border-radius: 4px;
|
||||
padding: 5px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ninja-forms-calculations {
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
clear: both;
|
||||
float: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ninja-forms-calculations .label {
|
||||
background: #ccc;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ninja-forms-calc-row {
|
||||
background: #ddd;
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.ninja-forms-calc-row input{
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
#wpfooter {
|
||||
/*display: none;*/
|
||||
}
|
||||
|
||||
|
||||
/* ---------------------------------
|
||||
/ System Status Page
|
||||
----------------------------------*/
|
||||
#debug-report {
|
||||
display: none;
|
||||
}
|
||||
#debug-report textarea {
|
||||
height: 200px;
|
||||
width: 300px;
|
||||
}
|
||||
p.debug-report {
|
||||
display: inline-block;
|
||||
padding: .5em 0;
|
||||
}
|
||||
.nf-status-table {
|
||||
background: #f1f1f1;
|
||||
border-radius: 4px 4px 0 0;
|
||||
width: 100%;
|
||||
}
|
||||
.nf-status-table th {
|
||||
border-color: #ccc;
|
||||
border-style: solid;
|
||||
border-width: 1px 1px 0 1px;
|
||||
border-radius: 4px 4px 0 0;
|
||||
font-size: 1.4em;
|
||||
font-weight: normal;
|
||||
padding: .5em 0;
|
||||
width: 100%;
|
||||
}
|
||||
.nf-status-table thead:first-child th {
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
.nf-status-table td {
|
||||
border-color: #ccc;
|
||||
border-style: solid;
|
||||
border-width: 1px 1px 0px 1px;
|
||||
padding: .5em;
|
||||
}
|
||||
.nf-status-table td:first-child {
|
||||
border-left: 1px solid #ccc;
|
||||
border-right-width: 0;
|
||||
}
|
||||
.nf-status-table tbody:last-child td {
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
|
||||
/* ---------------------------------
|
||||
/ WP 3.8 styles
|
||||
----------------------------------*/
|
||||
|
||||
.branch-3-8 #post-body .menu-item-handle,
|
||||
.branch-3-9 #post-body .menu-item-handle,
|
||||
.branch-4 #post-body .menu-item-handle,
|
||||
.branch-4-1 #post-body .menu-item-handle,
|
||||
.branch-4-2 #post-body .menu-item-handle,
|
||||
.branch-4-3 #post-body .menu-item-handle,
|
||||
.branch-4-4 #post-body .menu-item-handle,
|
||||
.branch-4-5 #post-body .menu-item-handle,
|
||||
.branch-4-6 #post-body .menu-item-handle,
|
||||
.branch-4-7 #post-body .menu-item-handle {
|
||||
background: #fff;
|
||||
padding: 10px 5px 10px 10px;
|
||||
}
|
||||
.branch-3-8 #post-body .menu-item-settings,
|
||||
.branch-3-9 #post-body .menu-item-settings,
|
||||
.branch-4 #post-body .menu-item-settings,
|
||||
.branch-4-1 #post-body .menu-item-settings,
|
||||
.branch-4-2 #post-body .menu-item-settings,
|
||||
.branch-4-3 #post-body .menu-item-settings,
|
||||
.branch-4-4 #post-body .menu-item-settings,
|
||||
.branch-4-5 #post-body .menu-item-settings,
|
||||
.branch-4-6 #post-body .menu-item-settings,
|
||||
.branch-4-7 #post-body .menu-item-settings {
|
||||
background: #fff;
|
||||
padding: 12px;
|
||||
}
|
||||
.branch-3-8 #post-body #post-body-content h3,
|
||||
.branch-3-9 #post-body #post-body-content h3,
|
||||
.branch-4 #post-body #post-body-content h3,
|
||||
.branch-4-1 #post-body #post-body-content h3,
|
||||
.branch-4-2 #post-body #post-body-content h3,
|
||||
.branch-4-3 #post-body #post-body-content h3,
|
||||
.branch-4-4 #post-body #post-body-content h3,
|
||||
.branch-4-5 #post-body #post-body-content h3,
|
||||
.branch-4-6 #post-body #post-body-content h3,
|
||||
.branch-4-7 #post-body #post-body-content h3 {
|
||||
margin-top: 0;
|
||||
}
|
||||
/*.branch-3-8 .item-controls {
|
||||
top: 5px;
|
||||
}*/
|
||||
.branch-3-8 #TB_window .item-controls,
|
||||
.branch-3-9 #TB_window .item-controls,
|
||||
.branch-4 #TB_window .item-controls,
|
||||
.branch-4-1 #TB_window .item-controls,
|
||||
.branch-4-2 #TB_window .item-controls,
|
||||
.branch-4-3 #TB_window .item-controls,
|
||||
.branch-4-4 #TB_window .item-controls,
|
||||
.branch-4-5 #TB_window .item-controls,
|
||||
.branch-4-6 #TB_window .item-controls,
|
||||
.branch-4-7 #TB_window .item-controls {
|
||||
top: -5px;
|
||||
}
|
||||
|
||||
.branch-4-5 .inside::after,
|
||||
.branch-4-6 .inside::after,
|
||||
.branch-4-7 .inside::after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
}
|
||||
.branch-4-5.nav-menus-php .item-edit,
|
||||
.branch-4-6.nav-menus-php .item-edit,
|
||||
.branch-4-7.nav-menus-php .item-edit {
|
||||
visibility: hidden;
|
||||
}
|
||||
.branch-4-5.nav-menus-php .item-edit::before,
|
||||
.branch-4-6.nav-menus-php .item-edit::before,
|
||||
.branch-4-7.nav-menus-php .item-edit::before {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.nf-more-actions {
|
||||
display: inline-block;
|
||||
padding-top: 6px;
|
||||
}
|
||||
|
||||
.nf-more-actions a span {
|
||||
font-size: 14px;
|
||||
text-decoration: none;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.nf-preview,
|
||||
.nf-subs {
|
||||
text-decoration: none;
|
||||
}
|
||||
.nf-preview span,
|
||||
.nf-subs span {
|
||||
font-size: 20px;
|
||||
width: 30px;
|
||||
height: 28px;
|
||||
padding-top: 3px;
|
||||
margin-left: -5px;
|
||||
}
|
||||
.nf-subs-svg {
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
.nf-remove-list-option {
|
||||
color: #444;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.nf-remove-list-option:hover {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
.nf-field-settings {
|
||||
overflow: auto;
|
||||
margin-top: 5px !important;
|
||||
margin-bottom: 5px !important;
|
||||
}
|
||||
|
||||
.nf-field-settings .title {
|
||||
background: #f1f1f1;
|
||||
padding: 5px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.nf-field-settings .dashicons {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.item-edit.open:before {
|
||||
content: '\f142' ! important;
|
||||
}
|
||||
|
||||
/*.nf-field-settings .inside {
|
||||
background: #f1f1f1;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.nf-field-settings .inside:after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: block;
|
||||
}*/
|
||||
|
||||
.nf-nuke-warning {
|
||||
font-weight: bold;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.about-overview {
|
||||
padding: 20px;
|
||||
}
|
||||
.about-overview iframe {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.querystring-error {
|
||||
color: red;
|
||||
}
|
||||
input[type=text].error {
|
||||
border: solid red;
|
||||
}
|
||||
|
|
@ -1,323 +0,0 @@
|
|||
.ninja-forms-form-wrap *,
|
||||
.ninja-forms-form-wrap *:after,
|
||||
.ninja-forms-form-wrap *:before {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-ms-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
a.tooltip {outline:none; text-decoration: none; }
|
||||
a.tooltip strong {line-height:30px;}
|
||||
a.tooltip:hover {text-decoration:none;}
|
||||
a.tooltip span {
|
||||
z-index:10;display:none; padding:14px 20px;
|
||||
margin-top:-10px; margin-left:28px;
|
||||
width:240px; line-height:16px;
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
}
|
||||
a.tooltip span:before {
|
||||
border-top: 10px solid transparent;
|
||||
border-right: 15px solid #ccc;
|
||||
border-bottom: 10px solid transparent;
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
|
||||
}
|
||||
a.tooltip:hover span{
|
||||
display:inline; position:absolute; color:#333;
|
||||
border:1px solid #ccc; background:#f1f1f1;}
|
||||
|
||||
/*CSS3 extras*/
|
||||
a.tooltip span
|
||||
{
|
||||
border-radius:4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
|
||||
-moz-box-shadow: 5px 5px 8px #CCC;
|
||||
-webkit-box-shadow: 5px 5px 8px #CCC;
|
||||
box-shadow: 5px 5px 8px #CCC;
|
||||
}
|
||||
#ui-datepicker-div {
|
||||
background: #f1f1f1;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#ui-datepicker-div a {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
#ui-datepicker-div .ui-datepicker-header,
|
||||
#ui-datepicker-div .ui-datepicker-calendar th,
|
||||
#ui-datepicker-div .ui-datepicker-calendar td {
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#ui-datepicker-div .ui-icon {
|
||||
text-indent: 0px;
|
||||
}
|
||||
.ui-datepicker-prev {
|
||||
float: left;
|
||||
}
|
||||
.ui-datepicker-next {
|
||||
float: right;
|
||||
}
|
||||
.ninja-forms-no-display {
|
||||
display: none;
|
||||
}
|
||||
.ninja-forms-form .wp-switch-editor {
|
||||
height: auto;
|
||||
}
|
||||
.ninja-forms-form .mceIframeContainer {
|
||||
background: #fff;
|
||||
}
|
||||
.ninja-forms-req-symbol {
|
||||
color: #ff0000;
|
||||
}
|
||||
.ninja-forms-form .label-above label,
|
||||
.ninja-forms-form .label-below label {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.field-wrap,
|
||||
#ninja_forms_required_items {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#pass-strength-result {
|
||||
background-color: #eee;
|
||||
border-color: #ddd !important;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
margin: 13px 5px 5px 1px;
|
||||
padding: 3px 5px;
|
||||
text-align: center;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
#pass-strength-result.bad {
|
||||
background-color: #ffb78c;
|
||||
border-color: #ff853c !important;
|
||||
}
|
||||
|
||||
#pass-strength-result.good {
|
||||
background-color: #ffec8b;
|
||||
border-color: #fc0 !important;
|
||||
}
|
||||
|
||||
#pass-strength-result.short {
|
||||
background-color: #ffa0a0;
|
||||
border-color: #f04040 !important;
|
||||
}
|
||||
|
||||
#pass-strength-result.strong {
|
||||
background-color: #c3ff88;
|
||||
border-color: #8dff1c !important;
|
||||
}
|
||||
.ninja-forms-cont {
|
||||
position: relative;
|
||||
}
|
||||
.ninja-forms-cont:after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ninja-forms-field-error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.ninja-forms-form-wrap input,
|
||||
.ninja-forms-form-wrap select ,
|
||||
.ninja-forms-form-wrap textarea {
|
||||
width: auto;
|
||||
height: auto;
|
||||
vertical-align: inherit;
|
||||
}
|
||||
|
||||
.ninja-forms-form-wrap label {
|
||||
font-weight: bold;
|
||||
}
|
||||
.ninja-forms-form-wrap .list-checkbox-wrap ul label,
|
||||
.ninja-forms-form-wrap .list-radio-wrap ul label {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.field-wrap:after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: block;
|
||||
}
|
||||
|
||||
.field-wrap.label-left .ninja-forms-field,
|
||||
.field-wrap.label-left .ninja-forms-star-rating-control {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.field-wrap.label-right .ninja-forms-field,
|
||||
.field-wrap.label-right .ninja-forms-star-rating-control {
|
||||
margin-right: 8px;
|
||||
}
|
||||
.field-wrap.label-right label,
|
||||
.field-wrap.label-left label {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.label-above label {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.MultiFile-wrap {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/* ---------------------------------
|
||||
TEXT FIELDS & TEXTAREAS
|
||||
----------------------------------*/
|
||||
|
||||
.text-wrap.label-left input,
|
||||
.profile_pass-wrap.label-left input,
|
||||
.textarea-wrap.label-left textarea {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.text-wrap.label-right input,
|
||||
.profile_pass-wrap.label-right input,
|
||||
.textarea-wrap.label-right textarea {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.text-wrap.label-above label,
|
||||
.textarea-wrap.label-above label {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.profile_pass-wrap input,
|
||||
.text-wrap.label-above input,
|
||||
.text-wrap.label-below input,
|
||||
.text-wrap.label-inside input,
|
||||
.textarea-wrap.label-above textarea,
|
||||
.textarea-wrap.label-below textarea,
|
||||
.textarea-wrap.label-inside textarea,
|
||||
.list-dropdown-wrap.label-above select,
|
||||
.list-dropdown-wrap.label-below select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.textarea-wrap textarea {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.profile_pass-wrap input {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* ---------------------------------
|
||||
RADIO & CHECKBOX LISTS
|
||||
----------------------------------*/
|
||||
|
||||
.list-radio-wrap span ul li input,
|
||||
.list-checkbox-wrap span ul li input {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.list-radio-wrap span ul,
|
||||
.list-checkbox-wrap span ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.list-radio-wrap span ul li,
|
||||
.list-checkbox-wrap span ul li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.list-radio-wrap span ul li,
|
||||
.list-checkbox-wrap span ul li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.list-radio-wrap.label-left label,
|
||||
.list-radio-wrap.label-left ul,
|
||||
.list-radio-wrap.label-left ul li,
|
||||
.list-radio-wrap.label-right label,
|
||||
.list-radio-wrap.label-right ul,
|
||||
.list-radio-wrap.label-right ul li,
|
||||
.list-checkbox-wrap.label-left label,
|
||||
.list-checkbox-wrap.label-left ul,
|
||||
.list-checkbox-wrap.label-left ul li,
|
||||
.list-checkbox-wrap.label-right label,
|
||||
.list-checkbox-wrap.label-right ul,
|
||||
.list-checkbox-wrap.label-right ul li {
|
||||
float: left;
|
||||
}
|
||||
.rtl .list-radio-wrap.label-left label,
|
||||
.rtl .list-radio-wrap.label-left ul,
|
||||
.rtl .list-radio-wrap.label-left ul li,
|
||||
.rtl .list-radio-wrap.label-right label,
|
||||
.rtl .list-radio-wrap.label-right ul,
|
||||
.rtl .list-radio-wrap.label-right ul li,
|
||||
.rtl .list-checkbox-wrap.label-left label,
|
||||
.rtl .list-checkbox-wrap.label-left ul,
|
||||
.rtl .list-checkbox-wrap.label-left ul li,
|
||||
.rtl .list-checkbox-wrap.label-right label,
|
||||
.rtl .list-checkbox-wrap.label-right ul,
|
||||
.rtl .list-checkbox-wrap.label-right ul li {
|
||||
float: right;
|
||||
}
|
||||
.list-radio-wrap.label-left ul li,
|
||||
.list-radio-wrap.label-right ul li,
|
||||
.list-checkbox-wrap.label-left ul li,
|
||||
.list-checkbox-wrap.label-right ul li {
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
.list-radio-wrap.label-above ul li,
|
||||
.list-radio-wrap.label-below ul li,
|
||||
.list-checkbox-wrap.label-above ul li,
|
||||
.list-checkbox-wrap.label-below ul li {
|
||||
padding: 0 0 0 10px;
|
||||
}
|
||||
|
||||
/* ---------------------------------
|
||||
MULTI FIELD
|
||||
----------------------------------*/
|
||||
|
||||
.list-multi-wrap.label-left label {
|
||||
float:left;
|
||||
}
|
||||
.list-multi-wrap.label-right select {
|
||||
float:left;
|
||||
}
|
||||
|
||||
/* ---------------------------------
|
||||
CREDIT CARD BLOCK
|
||||
----------------------------------*/
|
||||
|
||||
.credit_card-wrap div label,
|
||||
.credit_card-wrap div input {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
.credit_card-wrap div {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.credit_card-wrap div span {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
/* ---------------------------------
|
||||
HONEYPOT
|
||||
----------------------------------*/
|
||||
|
||||
.hp-wrap {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.honeypot-wrap {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -1,222 +0,0 @@
|
|||
/*! qTip2 - Pretty powerful tooltips - v2.0.0 - 2012-12-21
|
||||
* http://craigsworks.com/projects/qtip2/
|
||||
* Copyright (c) 2012 Craig Michael Thompson; Licensed MIT, GPL */
|
||||
|
||||
/* Core qTip styles */
|
||||
.qtip, .qtip{
|
||||
position: absolute;
|
||||
left: -28000px;
|
||||
top: -28000px;
|
||||
display: none;
|
||||
|
||||
max-width: 280px;
|
||||
min-width: 50px;
|
||||
|
||||
font-size: 10.5px;
|
||||
line-height: 12px;
|
||||
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.qtip-content{
|
||||
position: relative;
|
||||
padding: 5px 9px;
|
||||
overflow: hidden;
|
||||
|
||||
text-align: left;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.qtip-titlebar{
|
||||
position: relative;
|
||||
padding: 5px 35px 5px 10px;
|
||||
overflow: hidden;
|
||||
|
||||
border-width: 0 0 1px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }
|
||||
|
||||
/* Default close button class */
|
||||
.qtip-close{
|
||||
position: absolute;
|
||||
right: -9px; top: -9px;
|
||||
|
||||
cursor: pointer;
|
||||
outline: medium none;
|
||||
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.qtip-titlebar .qtip-close{
|
||||
right: 4px; top: 50%;
|
||||
margin-top: -9px;
|
||||
}
|
||||
|
||||
* html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
|
||||
|
||||
.qtip-titlebar .ui-icon,
|
||||
.qtip-icon .ui-icon{
|
||||
display: block;
|
||||
text-indent: -1000em;
|
||||
direction: ltr;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.qtip-icon, .qtip-icon .ui-icon{
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.qtip-icon .ui-icon{
|
||||
width: 18px;
|
||||
height: 14px;
|
||||
|
||||
text-align: center;
|
||||
text-indent: 0;
|
||||
font: normal bold 10px/13px Tahoma,sans-serif;
|
||||
|
||||
color: inherit;
|
||||
background: transparent none no-repeat -100em -100em;
|
||||
}
|
||||
|
||||
|
||||
/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
|
||||
.qtip-focus{}
|
||||
|
||||
/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
|
||||
.qtip-hover{}
|
||||
|
||||
/* Default tooltip style */
|
||||
.qtip-default{
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #F1D031;
|
||||
|
||||
background-color: #FFFFA3;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.qtip-default .qtip-titlebar{
|
||||
background-color: #FFEF93;
|
||||
}
|
||||
|
||||
.qtip-default .qtip-icon{
|
||||
border-color: #CCC;
|
||||
background: #F1F1F1;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.qtip-default .qtip-titlebar .qtip-close{
|
||||
border-color: #AAA;
|
||||
color: #111;
|
||||
}
|
||||
|
||||
|
||||
/*! Light tooltip style */
|
||||
.qtip-light{
|
||||
background-color: white;
|
||||
border-color: #E2E2E2;
|
||||
color: #454545;
|
||||
}
|
||||
|
||||
.qtip-light .qtip-titlebar{
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
|
||||
/*! Dark tooltip style */
|
||||
.qtip-dark{
|
||||
background-color: #505050;
|
||||
border-color: #303030;
|
||||
color: #f3f3f3;
|
||||
}
|
||||
|
||||
.qtip-dark .qtip-titlebar{
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
.qtip-dark .qtip-icon{
|
||||
border-color: #444;
|
||||
}
|
||||
|
||||
.qtip-dark .qtip-titlebar .ui-state-hover{
|
||||
border-color: #303030;
|
||||
}
|
||||
|
||||
|
||||
/*! Cream tooltip style */
|
||||
.qtip-cream{
|
||||
background-color: #FBF7AA;
|
||||
border-color: #F9E98E;
|
||||
color: #A27D35;
|
||||
}
|
||||
|
||||
.qtip-cream .qtip-titlebar{
|
||||
background-color: #F0DE7D;
|
||||
}
|
||||
|
||||
.qtip-cream .qtip-close .qtip-icon{
|
||||
background-position: -82px 0;
|
||||
}
|
||||
|
||||
|
||||
/*! Red tooltip style */
|
||||
.qtip-red{
|
||||
background-color: #F78B83;
|
||||
border-color: #D95252;
|
||||
color: #912323;
|
||||
}
|
||||
|
||||
.qtip-red .qtip-titlebar{
|
||||
background-color: #F06D65;
|
||||
}
|
||||
|
||||
.qtip-red .qtip-close .qtip-icon{
|
||||
background-position: -102px 0;
|
||||
}
|
||||
|
||||
.qtip-red .qtip-icon{
|
||||
border-color: #D95252;
|
||||
}
|
||||
|
||||
.qtip-red .qtip-titlebar .ui-state-hover{
|
||||
border-color: #D95252;
|
||||
}
|
||||
|
||||
|
||||
/*! Green tooltip style */
|
||||
.qtip-green{
|
||||
background-color: #CAED9E;
|
||||
border-color: #90D93F;
|
||||
color: #3F6219;
|
||||
}
|
||||
|
||||
.qtip-green .qtip-titlebar{
|
||||
background-color: #B0DE78;
|
||||
}
|
||||
|
||||
.qtip-green .qtip-close .qtip-icon{
|
||||
background-position: -42px 0;
|
||||
}
|
||||
|
||||
|
||||
/*! Blue tooltip style */
|
||||
.qtip-blue{
|
||||
background-color: #E5F6FE;
|
||||
border-color: #ADD9ED;
|
||||
color: #5E99BD;
|
||||
}
|
||||
|
||||
.qtip-blue .qtip-titlebar{
|
||||
background-color: #D0E9F5;
|
||||
}
|
||||
|
||||
.qtip-blue .qtip-close .qtip-icon{
|
||||
background-position: -2px 0;
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 98 B |
|
Before Width: | Height: | Size: 97 B |
|
Before Width: | Height: | Size: 113 B |
|
Before Width: | Height: | Size: 82 B |
|
Before Width: | Height: | Size: 89 B |
|
Before Width: | Height: | Size: 88 B |
|
Before Width: | Height: | Size: 113 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
|
@ -1,2 +0,0 @@
|
|||
<?php
|
||||
// Silence is golden.
|
||||
|
|
@ -1,405 +0,0 @@
|
|||
/*
|
||||
* jQuery UI CSS Framework
|
||||
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||
*/
|
||||
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden { display: none; }
|
||||
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
.ui-helper-clearfix { display: inline-block; }
|
||||
/* required comment for clearfix to work in Opera \*/
|
||||
* html .ui-helper-clearfix { height:1%; }
|
||||
.ui-helper-clearfix { display:block; }
|
||||
/* end clearfix */
|
||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled { cursor: default !important; }
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
/*
|
||||
* jQuery UI CSS Framework
|
||||
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
|
||||
.ui-widget-content a { color: #222222; }
|
||||
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
|
||||
.ui-widget-header a { color: #222222; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; }
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; }
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
|
||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
|
||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background-position: -16px -144px; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
|
||||
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
||||
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
||||
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
||||
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
||||
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
||||
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
||||
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
|
||||
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Resizable
|
||||
----------------------------------*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion
|
||||
----------------------------------*/
|
||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
|
||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
|
||||
.ui-accordion .ui-accordion-content-active { display: block; }/* Dialog
|
||||
----------------------------------*/
|
||||
.ui-dialog { position: relative; padding: .2em; width: 300px; }
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||
/* Slider
|
||||
----------------------------------*/
|
||||
.ui-slider { position: relative; text-align: left; }
|
||||
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
|
||||
|
||||
.ui-slider-horizontal { height: .8em; }
|
||||
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||
|
||||
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
||||
----------------------------------*/
|
||||
.ui-tabs { padding: .2em; zoom: 1; }
|
||||
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
|
||||
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
|
||||
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
|
||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
||||
/* Datepicker
|
||||
----------------------------------*/
|
||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
|
||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
|
||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||
.ui-datepicker td { border: 0; padding: 1px; }
|
||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl { direction: rtl; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
|
||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||
.ui-datepicker-cover {
|
||||
display: none; /*sorry for IE5*/
|
||||
display/**/: block; /*sorry for IE5*/
|
||||
position: absolute; /*must have*/
|
||||
z-index: -1; /*must have*/
|
||||
filter: mask(); /*must have*/
|
||||
top: -4px; /*must have*/
|
||||
left: -4px; /*must have*/
|
||||
width: 200px; /*must have*/
|
||||
height: 200px; /*must have*/
|
||||
}/* Progressbar
|
||||
----------------------------------*/
|
||||
.ui-progressbar { height:1em; text-align: left; }
|
||||
.ui-progressbar-value { height:100%; margin: -1px; font-size: .3em; text-align: right; background-color: #0CF; }
|
||||
|
Before Width: | Height: | Size: 90 B |
|
Before Width: | Height: | Size: 752 B |
|
Before Width: | Height: | Size: 2.1 KiB |