fix crlf
This commit is contained in:
File diff suppressed because it is too large
Load Diff
562
license.txt
562
license.txt
@@ -1,282 +1,282 @@
|
||||
The GNU General Public License (GPL)
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
The GNU General Public License (GPL)
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
@@ -1,144 +1,144 @@
|
||||
<?php
|
||||
/**
|
||||
* 支持用twitter帐号在blog中留言并同步到twitter上
|
||||
*
|
||||
* @package Connect to Twittter
|
||||
* @author blankyao
|
||||
* @version 1.0.0 Beta
|
||||
* @link http://www.blankyao.cn
|
||||
* @todo 文章自动推送到twitter twitter帐号注册
|
||||
*/
|
||||
|
||||
include 'twitterOAuth.php';
|
||||
|
||||
class ConnectToTwitter_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* 激活插件方法,如果激活失败,直接抛出异常
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function activate() {
|
||||
Typecho_Plugin::factory('Widget_Feedback')->finishComment = array('ConnectToTwitter_Plugin', 'postToTwitter');
|
||||
Typecho_Plugin::factory('Widget_Archive')->beforeRender = array('ConnectToTwitter_Plugin', 'initComment');
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用插件方法,如果禁用失败,直接抛出异常
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function deactivate() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form 配置面板
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{
|
||||
$consumerKey = new Typecho_Widget_Helper_Form_Element_Text('consumerKey', NULL, '',
|
||||
_t('Consumer Key'), _t('Your application consumer key from Twitter.com. '));
|
||||
$form->addInput($consumerKey->addRule('required', _t('You must give the Consumer Key from Twitter.com')));
|
||||
|
||||
$consumerSecret = new Typecho_Widget_Helper_Form_Element_Text('consumerSecret', NULL, '',
|
||||
_t('Consumer Secret'), _t('Your application consumer secret from Twitter.com. '));
|
||||
$form->addInput($consumerSecret->addRule('required', _t('You must give the Consumer Key from Twitter.com')));
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
public static function initComment($api)
|
||||
{
|
||||
session_start();
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$config = $options->plugin('ConnectToTwitter');
|
||||
|
||||
//发送请求到twitter
|
||||
if(isset($api->request->connect_to_twitter))
|
||||
{
|
||||
$to = new TwitterOAuth($config->consumerKey, $config->consumerSecret);
|
||||
|
||||
$tok = $to->getRequestToken();
|
||||
|
||||
Typecho_Cookie::set('oauth_request_token', $tok['oauth_token']);
|
||||
Typecho_Cookie::set('oauth_request_token_secret', $tok['oauth_token_secret']);
|
||||
|
||||
/* Build the authorization URL */
|
||||
$request_link = $to->getAuthorizeURL($tok['oauth_token']);
|
||||
header('Location:'.$request_link);
|
||||
}
|
||||
|
||||
//从twitter返回
|
||||
if(isset($api->request->oauth_token)) {
|
||||
if(Typecho_Cookie::get('oauth_request_token') && Typecho_Cookie::get('oauth_request_token_secret'))
|
||||
{
|
||||
$to = new TwitterOAuth($config->consumerKey, $config->consumerSecret, Typecho_Cookie::get('oauth_request_token'), Typecho_Cookie::get('oauth_request_token_secret'));
|
||||
|
||||
$tok = $to->getAccessToken();
|
||||
|
||||
Typecho_Cookie::set('oauth_access_token', $tok['oauth_token'], time()+60*60*24*30);
|
||||
Typecho_Cookie::set('oauth_access_token_secret', $tok['oauth_token_secret'], time()+60*60*24*30);
|
||||
|
||||
$info_json = $to->OAuthRequest('https://twitter.com/account/verify_credentials.json', array(), 'GET');
|
||||
$info = Typecho_Json::decode($info_json, true);
|
||||
|
||||
self::twitterLogin($info, $api);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//登录,暂时做为setcookie,以后要和用户帐号相关联
|
||||
public static function twitterLogin($info, $api)
|
||||
{
|
||||
if (!empty($info['screen_name'])) {
|
||||
Typecho_Cookie::set('__typecho_remember_author', $info['screen_name'], time()+60*60*24*30);
|
||||
}
|
||||
|
||||
if (!empty($info['url'])) {
|
||||
Typecho_Cookie::set('__typecho_remember_url', $info['url'], time()+60*60*24*30);
|
||||
}
|
||||
}
|
||||
|
||||
//发送信息到twitter
|
||||
public static function postToTwitter($api)
|
||||
{
|
||||
if(Typecho_Cookie::get('oauth_access_token') && Typecho_Cookie::get('oauth_access_token_secret') && $api->request->post_to_twitter) {
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$config = $options->plugin('ConnectToTwitter');
|
||||
$to = new TwitterOAuth($config->consumerKey, $config->consumerSecret, Typecho_Cookie::get('oauth_access_token'), Typecho_Cookie::get('oauth_access_token_secret'));
|
||||
|
||||
$url_array = array();
|
||||
$url_array = explode('?', $api->request->getReferer());
|
||||
$url = $url_array[0] . '#comment-' . $api->coid;
|
||||
$post = $api->text . ' ( from ' . $url . ' ) ';
|
||||
$twitter = $to->OAuthRequest('https://twitter.com/statuses/update.xml', array('status' => $post), 'POST');
|
||||
}
|
||||
return $comment;
|
||||
}
|
||||
|
||||
function showButton()
|
||||
{
|
||||
if(Typecho_Cookie::get('oauth_access_token') && Typecho_Cookie::get('oauth_access_token_secret')) {
|
||||
echo '<p><input type="checkbox" checked="" value="yes" id="post_to_twitter" name="post_to_twitter"/><label for="post_to_twitter">同时把留言更新到你的 Twitter</label></p>';
|
||||
} else {
|
||||
echo '<p><a href="?connect_to_twitter=yes"><img src="http://s3.amazonaws.com/static.whitleymedia/twitconnect.png" /></a></p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* 支持用twitter帐号在blog中留言并同步到twitter上
|
||||
*
|
||||
* @package Connect to Twittter
|
||||
* @author blankyao
|
||||
* @version 1.0.0 Beta
|
||||
* @link http://www.blankyao.cn
|
||||
* @todo 文章自动推送到twitter twitter帐号注册
|
||||
*/
|
||||
|
||||
include 'twitterOAuth.php';
|
||||
|
||||
class ConnectToTwitter_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* 激活插件方法,如果激活失败,直接抛出异常
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function activate() {
|
||||
Typecho_Plugin::factory('Widget_Feedback')->finishComment = array('ConnectToTwitter_Plugin', 'postToTwitter');
|
||||
Typecho_Plugin::factory('Widget_Archive')->beforeRender = array('ConnectToTwitter_Plugin', 'initComment');
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用插件方法,如果禁用失败,直接抛出异常
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function deactivate() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form 配置面板
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{
|
||||
$consumerKey = new Typecho_Widget_Helper_Form_Element_Text('consumerKey', NULL, '',
|
||||
_t('Consumer Key'), _t('Your application consumer key from Twitter.com. '));
|
||||
$form->addInput($consumerKey->addRule('required', _t('You must give the Consumer Key from Twitter.com')));
|
||||
|
||||
$consumerSecret = new Typecho_Widget_Helper_Form_Element_Text('consumerSecret', NULL, '',
|
||||
_t('Consumer Secret'), _t('Your application consumer secret from Twitter.com. '));
|
||||
$form->addInput($consumerSecret->addRule('required', _t('You must give the Consumer Key from Twitter.com')));
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
public static function initComment($api)
|
||||
{
|
||||
session_start();
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$config = $options->plugin('ConnectToTwitter');
|
||||
|
||||
//发送请求到twitter
|
||||
if(isset($api->request->connect_to_twitter))
|
||||
{
|
||||
$to = new TwitterOAuth($config->consumerKey, $config->consumerSecret);
|
||||
|
||||
$tok = $to->getRequestToken();
|
||||
|
||||
Typecho_Cookie::set('oauth_request_token', $tok['oauth_token']);
|
||||
Typecho_Cookie::set('oauth_request_token_secret', $tok['oauth_token_secret']);
|
||||
|
||||
/* Build the authorization URL */
|
||||
$request_link = $to->getAuthorizeURL($tok['oauth_token']);
|
||||
header('Location:'.$request_link);
|
||||
}
|
||||
|
||||
//从twitter返回
|
||||
if(isset($api->request->oauth_token)) {
|
||||
if(Typecho_Cookie::get('oauth_request_token') && Typecho_Cookie::get('oauth_request_token_secret'))
|
||||
{
|
||||
$to = new TwitterOAuth($config->consumerKey, $config->consumerSecret, Typecho_Cookie::get('oauth_request_token'), Typecho_Cookie::get('oauth_request_token_secret'));
|
||||
|
||||
$tok = $to->getAccessToken();
|
||||
|
||||
Typecho_Cookie::set('oauth_access_token', $tok['oauth_token'], time()+60*60*24*30);
|
||||
Typecho_Cookie::set('oauth_access_token_secret', $tok['oauth_token_secret'], time()+60*60*24*30);
|
||||
|
||||
$info_json = $to->OAuthRequest('https://twitter.com/account/verify_credentials.json', array(), 'GET');
|
||||
$info = Typecho_Json::decode($info_json, true);
|
||||
|
||||
self::twitterLogin($info, $api);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//登录,暂时做为setcookie,以后要和用户帐号相关联
|
||||
public static function twitterLogin($info, $api)
|
||||
{
|
||||
if (!empty($info['screen_name'])) {
|
||||
Typecho_Cookie::set('__typecho_remember_author', $info['screen_name'], time()+60*60*24*30);
|
||||
}
|
||||
|
||||
if (!empty($info['url'])) {
|
||||
Typecho_Cookie::set('__typecho_remember_url', $info['url'], time()+60*60*24*30);
|
||||
}
|
||||
}
|
||||
|
||||
//发送信息到twitter
|
||||
public static function postToTwitter($api)
|
||||
{
|
||||
if(Typecho_Cookie::get('oauth_access_token') && Typecho_Cookie::get('oauth_access_token_secret') && $api->request->post_to_twitter) {
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$config = $options->plugin('ConnectToTwitter');
|
||||
$to = new TwitterOAuth($config->consumerKey, $config->consumerSecret, Typecho_Cookie::get('oauth_access_token'), Typecho_Cookie::get('oauth_access_token_secret'));
|
||||
|
||||
$url_array = array();
|
||||
$url_array = explode('?', $api->request->getReferer());
|
||||
$url = $url_array[0] . '#comment-' . $api->coid;
|
||||
$post = $api->text . ' ( from ' . $url . ' ) ';
|
||||
$twitter = $to->OAuthRequest('https://twitter.com/statuses/update.xml', array('status' => $post), 'POST');
|
||||
}
|
||||
return $comment;
|
||||
}
|
||||
|
||||
function showButton()
|
||||
{
|
||||
if(Typecho_Cookie::get('oauth_access_token') && Typecho_Cookie::get('oauth_access_token_secret')) {
|
||||
echo '<p><input type="checkbox" checked="" value="yes" id="post_to_twitter" name="post_to_twitter"/><label for="post_to_twitter">同时把留言更新到你的 Twitter</label></p>';
|
||||
} else {
|
||||
echo '<p><a href="?connect_to_twitter=yes"><img src="http://s3.amazonaws.com/static.whitleymedia/twitconnect.png" /></a></p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,262 +1,262 @@
|
||||
<?php
|
||||
// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
|
||||
/**
|
||||
* Baseline rule class for extension into a "real" parser component.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version CVS: $Id: Parse.inc.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
|
||||
/**
|
||||
* Baseline rule class for extension into a "real" parser component.
|
||||
*
|
||||
* Text_Wiki_Rule classes do not stand on their own; they are called by a
|
||||
* Text_Wiki object, typcially in the transform() method. Each rule class
|
||||
* performs three main activities: parse, process, and render.
|
||||
*
|
||||
* The parse() method takes a regex and applies it to the whole block of
|
||||
* source text at one time. Each match is sent as $matches to the
|
||||
* process() method.
|
||||
*
|
||||
* The process() method acts on the matched text from the source, and
|
||||
* then processes the source text is some way. This may mean the
|
||||
* creation of a delimited token using addToken(). In every case, the
|
||||
* process() method returns the text that should replace the matched text
|
||||
* from parse().
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version Release: @package_version@
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
class Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration options for this parser rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $conf = array();
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Regular expression to find matching text for this rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of this rule for new token array elements.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $rule = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* A reference to the calling Text_Wiki object.
|
||||
*
|
||||
* This is needed so that each rule has access to the same source
|
||||
* text, token set, URLs, interwiki maps, page names, etc.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
|
||||
var $wiki = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor for this parser rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Parse(&$obj)
|
||||
{
|
||||
// set the reference to the calling Text_Wiki object;
|
||||
// this allows us access to the shared source text, token
|
||||
// array, etc.
|
||||
$this->wiki =& $obj;
|
||||
|
||||
// set the name of this rule; generally used when adding
|
||||
// to the tokens array. strip off the Text_Wiki_Parse_ portion.
|
||||
// text_wiki_parse_
|
||||
// 0123456789012345
|
||||
$tmp = substr(get_class($this), 16);
|
||||
$this->rule = ucwords(strtolower($tmp));
|
||||
|
||||
// override config options for the rule if specified
|
||||
if (isset($this->wiki->parseConf[$this->rule]) &&
|
||||
is_array($this->wiki->parseConf[$this->rule])) {
|
||||
|
||||
$this->conf = array_merge(
|
||||
$this->conf,
|
||||
$this->wiki->parseConf[$this->rule]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Abstrct method to parse source text for matches.
|
||||
*
|
||||
* Applies the rule's regular expression to the source text, passes
|
||||
* every match to the process() method, and replaces the matched text
|
||||
* with the results of the processing.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @see Text_Wiki_Parse::process()
|
||||
*
|
||||
*/
|
||||
|
||||
function parse()
|
||||
{
|
||||
$this->wiki->source = preg_replace_callback(
|
||||
$this->regex,
|
||||
array(&$this, 'process'),
|
||||
$this->wiki->source
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Abstract method to generate replacements for matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array $matches An array of matches from the parse() method
|
||||
* as generated by preg_replace_callback. $matches[0] is the full
|
||||
* matched string, $matches[1] is the first matched pattern,
|
||||
* $matches[2] is the second matched pattern, and so on.
|
||||
*
|
||||
* @return string The processed text replacement; defaults to the
|
||||
* full matched string (i.e., no changes to the text).
|
||||
*
|
||||
* @see Text_Wiki_Parse::parse()
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple method to safely get configuration key values.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $key The configuration key.
|
||||
*
|
||||
* @param mixed $default If the key does not exist, return this value
|
||||
* instead.
|
||||
*
|
||||
* @return mixed The configuration key value (if it exists) or the
|
||||
* default value (if not).
|
||||
*
|
||||
*/
|
||||
|
||||
function getConf($key, $default = null)
|
||||
{
|
||||
if (isset($this->conf[$key])) {
|
||||
return $this->conf[$key];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Extract 'attribute="value"' portions of wiki markup.
|
||||
*
|
||||
* This kind of markup is typically used only in macros, but is useful
|
||||
* anywhere.
|
||||
*
|
||||
* The syntax is pretty strict; there can be no spaces between the
|
||||
* option name, the equals, and the first double-quote; the value
|
||||
* must be surrounded by double-quotes. You can escape characters in
|
||||
* the value with a backslash, and the backslash will be stripped for
|
||||
* you.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $text The "attributes" portion of markup.
|
||||
*
|
||||
* @return array An associative array of key-value pairs where the
|
||||
* key is the option name and the value is the option value.
|
||||
*
|
||||
*/
|
||||
|
||||
function getAttrs($text)
|
||||
{
|
||||
// find the =" sections;
|
||||
$tmp = explode('="', trim($text));
|
||||
|
||||
// basic setup
|
||||
$k = count($tmp) - 1;
|
||||
$attrs = array();
|
||||
$key = null;
|
||||
|
||||
// loop through the sections
|
||||
foreach ($tmp as $i => $val) {
|
||||
|
||||
// first element is always the first key
|
||||
if ($i == 0) {
|
||||
$key = trim($val);
|
||||
continue;
|
||||
}
|
||||
|
||||
// find the last double-quote in the value.
|
||||
// the part to the left is the value for the last key,
|
||||
// the part to the right is the next key name
|
||||
$pos = strrpos($val, '"');
|
||||
$attrs[$key] = stripslashes(substr($val, 0, $pos));
|
||||
$key = trim(substr($val, $pos+1));
|
||||
|
||||
}
|
||||
|
||||
return $attrs;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
|
||||
/**
|
||||
* Baseline rule class for extension into a "real" parser component.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version CVS: $Id: Parse.inc.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
|
||||
/**
|
||||
* Baseline rule class for extension into a "real" parser component.
|
||||
*
|
||||
* Text_Wiki_Rule classes do not stand on their own; they are called by a
|
||||
* Text_Wiki object, typcially in the transform() method. Each rule class
|
||||
* performs three main activities: parse, process, and render.
|
||||
*
|
||||
* The parse() method takes a regex and applies it to the whole block of
|
||||
* source text at one time. Each match is sent as $matches to the
|
||||
* process() method.
|
||||
*
|
||||
* The process() method acts on the matched text from the source, and
|
||||
* then processes the source text is some way. This may mean the
|
||||
* creation of a delimited token using addToken(). In every case, the
|
||||
* process() method returns the text that should replace the matched text
|
||||
* from parse().
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version Release: @package_version@
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
class Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration options for this parser rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $conf = array();
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Regular expression to find matching text for this rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of this rule for new token array elements.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $rule = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* A reference to the calling Text_Wiki object.
|
||||
*
|
||||
* This is needed so that each rule has access to the same source
|
||||
* text, token set, URLs, interwiki maps, page names, etc.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
|
||||
var $wiki = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor for this parser rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Parse(&$obj)
|
||||
{
|
||||
// set the reference to the calling Text_Wiki object;
|
||||
// this allows us access to the shared source text, token
|
||||
// array, etc.
|
||||
$this->wiki =& $obj;
|
||||
|
||||
// set the name of this rule; generally used when adding
|
||||
// to the tokens array. strip off the Text_Wiki_Parse_ portion.
|
||||
// text_wiki_parse_
|
||||
// 0123456789012345
|
||||
$tmp = substr(get_class($this), 16);
|
||||
$this->rule = ucwords(strtolower($tmp));
|
||||
|
||||
// override config options for the rule if specified
|
||||
if (isset($this->wiki->parseConf[$this->rule]) &&
|
||||
is_array($this->wiki->parseConf[$this->rule])) {
|
||||
|
||||
$this->conf = array_merge(
|
||||
$this->conf,
|
||||
$this->wiki->parseConf[$this->rule]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Abstrct method to parse source text for matches.
|
||||
*
|
||||
* Applies the rule's regular expression to the source text, passes
|
||||
* every match to the process() method, and replaces the matched text
|
||||
* with the results of the processing.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @see Text_Wiki_Parse::process()
|
||||
*
|
||||
*/
|
||||
|
||||
function parse()
|
||||
{
|
||||
$this->wiki->source = preg_replace_callback(
|
||||
$this->regex,
|
||||
array(&$this, 'process'),
|
||||
$this->wiki->source
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Abstract method to generate replacements for matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array $matches An array of matches from the parse() method
|
||||
* as generated by preg_replace_callback. $matches[0] is the full
|
||||
* matched string, $matches[1] is the first matched pattern,
|
||||
* $matches[2] is the second matched pattern, and so on.
|
||||
*
|
||||
* @return string The processed text replacement; defaults to the
|
||||
* full matched string (i.e., no changes to the text).
|
||||
*
|
||||
* @see Text_Wiki_Parse::parse()
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple method to safely get configuration key values.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $key The configuration key.
|
||||
*
|
||||
* @param mixed $default If the key does not exist, return this value
|
||||
* instead.
|
||||
*
|
||||
* @return mixed The configuration key value (if it exists) or the
|
||||
* default value (if not).
|
||||
*
|
||||
*/
|
||||
|
||||
function getConf($key, $default = null)
|
||||
{
|
||||
if (isset($this->conf[$key])) {
|
||||
return $this->conf[$key];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Extract 'attribute="value"' portions of wiki markup.
|
||||
*
|
||||
* This kind of markup is typically used only in macros, but is useful
|
||||
* anywhere.
|
||||
*
|
||||
* The syntax is pretty strict; there can be no spaces between the
|
||||
* option name, the equals, and the first double-quote; the value
|
||||
* must be surrounded by double-quotes. You can escape characters in
|
||||
* the value with a backslash, and the backslash will be stripped for
|
||||
* you.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $text The "attributes" portion of markup.
|
||||
*
|
||||
* @return array An associative array of key-value pairs where the
|
||||
* key is the option name and the value is the option value.
|
||||
*
|
||||
*/
|
||||
|
||||
function getAttrs($text)
|
||||
{
|
||||
// find the =" sections;
|
||||
$tmp = explode('="', trim($text));
|
||||
|
||||
// basic setup
|
||||
$k = count($tmp) - 1;
|
||||
$attrs = array();
|
||||
$key = null;
|
||||
|
||||
// loop through the sections
|
||||
foreach ($tmp as $i => $val) {
|
||||
|
||||
// first element is always the first key
|
||||
if ($i == 0) {
|
||||
$key = trim($val);
|
||||
continue;
|
||||
}
|
||||
|
||||
// find the last double-quote in the value.
|
||||
// the part to the left is the value for the last key,
|
||||
// the part to the right is the next key name
|
||||
$pos = strrpos($val, '"');
|
||||
$attrs[$key] = stripslashes(substr($val, 0, $pos));
|
||||
$key = trim(substr($val, $pos+1));
|
||||
|
||||
}
|
||||
|
||||
return $attrs;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,67 +1,67 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for signatures.
|
||||
* This class implements a Text_Wiki rule to find sections of the source
|
||||
* text that are signatures. A signature is any line starting with exactly
|
||||
* two - signs.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Address.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Address extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to find source text matching this
|
||||
* rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^--([^-].*)$/m';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a token entry for the matched text. Token options are:
|
||||
*
|
||||
* 'start' => The starting point of the signature.
|
||||
*
|
||||
* 'end' => The ending point of the signature.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A delimited token number to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'end')
|
||||
);
|
||||
|
||||
return "\n" . $start . trim($matches[1]) . $end;
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for signatures.
|
||||
* This class implements a Text_Wiki rule to find sections of the source
|
||||
* text that are signatures. A signature is any line starting with exactly
|
||||
* two - signs.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Address.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Address extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to find source text matching this
|
||||
* rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^--([^-].*)$/m';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a token entry for the matched text. Token options are:
|
||||
*
|
||||
* 'start' => The starting point of the signature.
|
||||
*
|
||||
* 'end' => The ending point of the signature.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A delimited token number to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'end')
|
||||
);
|
||||
|
||||
return "\n" . $start . trim($matches[1]) . $end;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,176 +1,176 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parse for block-quoted text.
|
||||
*
|
||||
* Find source text marked as a blockquote, identified by any number of
|
||||
* greater-than signs '>' at the start of the line, followed by an
|
||||
* optional space, and then the quote text; each '>' indicates an
|
||||
* additional level of quoting.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Blockquote.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Blockquote extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Regex for parsing the source text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n(([>:]).*\n)(?!([>:]))/Us';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text.
|
||||
*
|
||||
* Token options are:
|
||||
*
|
||||
* 'type' =>
|
||||
* 'start' : the start of a blockquote
|
||||
* 'end' : the end of a blockquote
|
||||
*
|
||||
* 'level' => the indent level (0 for the first level, 1 for the
|
||||
* second, etc)
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A series of text and delimited tokens marking the different
|
||||
* list text and list elements.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// the replacement text we will return to parse()
|
||||
$return = '';
|
||||
|
||||
// the list of post-processing matches
|
||||
$list = array();
|
||||
|
||||
// $matches[1] is the text matched as a list set by parse();
|
||||
// create an array called $list that contains a new set of
|
||||
// matches for the various list-item elements.
|
||||
preg_match_all(
|
||||
'=^([>:]+)(.*?\n)=ms',
|
||||
$matches[1],
|
||||
$list,
|
||||
PREG_SET_ORDER
|
||||
);
|
||||
|
||||
// a stack of starts and ends; we keep this so that we know what
|
||||
// indent level we're at.
|
||||
$stack = array();
|
||||
|
||||
// loop through each list-item element.
|
||||
foreach ($list as $key => $val) {
|
||||
|
||||
// $val[0] is the full matched list-item line
|
||||
// $val[1] is the number of initial '>' chars (indent level)
|
||||
// $val[2] is the quote text
|
||||
|
||||
// we number levels starting at 1, not zero
|
||||
$level = strlen($val[1]);
|
||||
|
||||
// get the text of the line
|
||||
$text = trim($val[2]);
|
||||
|
||||
// add a level to the list?
|
||||
while ($level > count($stack)) {
|
||||
|
||||
$css = ($val[1][count($stack)] == ':') ? 'remark' : '';
|
||||
|
||||
// the current indent level is greater than the number
|
||||
// of stack elements, so we must be starting a new
|
||||
// level. push the new level onto the stack with a
|
||||
// dummy value (boolean true)...
|
||||
array_push($stack, true);
|
||||
|
||||
$return .= "\n\n";
|
||||
|
||||
// ...and add a start token to the return.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start',
|
||||
'level' => $level - 1,
|
||||
'css' => $css
|
||||
)
|
||||
);
|
||||
|
||||
$return .= "\n\n";
|
||||
}
|
||||
|
||||
// remove a level?
|
||||
while (count($stack) > $level) {
|
||||
|
||||
// as long as the stack count is greater than the
|
||||
// current indent level, we need to end list types.
|
||||
// continue adding end-list tokens until the stack count
|
||||
// and the indent level are the same.
|
||||
array_pop($stack);
|
||||
|
||||
$return .= "\n\n";
|
||||
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'end',
|
||||
'level' => count($stack)
|
||||
)
|
||||
);
|
||||
|
||||
$return .= "\n\n";
|
||||
}
|
||||
|
||||
// add the line text.
|
||||
$return .= $text . "\n";
|
||||
}
|
||||
|
||||
// the last line may have been indented. go through the stack
|
||||
// and create end-tokens until the stack is empty.
|
||||
$return .= "\n\n";
|
||||
|
||||
while (count($stack) > 0) {
|
||||
array_pop($stack);
|
||||
|
||||
$return .= "\n\n";
|
||||
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'end',
|
||||
'level' => count($stack)
|
||||
)
|
||||
);
|
||||
|
||||
$return .= "\n\n";
|
||||
}
|
||||
|
||||
// we're done! send back the replacement text.
|
||||
return "\n\n$return\n\n";
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parse for block-quoted text.
|
||||
*
|
||||
* Find source text marked as a blockquote, identified by any number of
|
||||
* greater-than signs '>' at the start of the line, followed by an
|
||||
* optional space, and then the quote text; each '>' indicates an
|
||||
* additional level of quoting.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Blockquote.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Blockquote extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Regex for parsing the source text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n(([>:]).*\n)(?!([>:]))/Us';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text.
|
||||
*
|
||||
* Token options are:
|
||||
*
|
||||
* 'type' =>
|
||||
* 'start' : the start of a blockquote
|
||||
* 'end' : the end of a blockquote
|
||||
*
|
||||
* 'level' => the indent level (0 for the first level, 1 for the
|
||||
* second, etc)
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A series of text and delimited tokens marking the different
|
||||
* list text and list elements.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// the replacement text we will return to parse()
|
||||
$return = '';
|
||||
|
||||
// the list of post-processing matches
|
||||
$list = array();
|
||||
|
||||
// $matches[1] is the text matched as a list set by parse();
|
||||
// create an array called $list that contains a new set of
|
||||
// matches for the various list-item elements.
|
||||
preg_match_all(
|
||||
'=^([>:]+)(.*?\n)=ms',
|
||||
$matches[1],
|
||||
$list,
|
||||
PREG_SET_ORDER
|
||||
);
|
||||
|
||||
// a stack of starts and ends; we keep this so that we know what
|
||||
// indent level we're at.
|
||||
$stack = array();
|
||||
|
||||
// loop through each list-item element.
|
||||
foreach ($list as $key => $val) {
|
||||
|
||||
// $val[0] is the full matched list-item line
|
||||
// $val[1] is the number of initial '>' chars (indent level)
|
||||
// $val[2] is the quote text
|
||||
|
||||
// we number levels starting at 1, not zero
|
||||
$level = strlen($val[1]);
|
||||
|
||||
// get the text of the line
|
||||
$text = trim($val[2]);
|
||||
|
||||
// add a level to the list?
|
||||
while ($level > count($stack)) {
|
||||
|
||||
$css = ($val[1][count($stack)] == ':') ? 'remark' : '';
|
||||
|
||||
// the current indent level is greater than the number
|
||||
// of stack elements, so we must be starting a new
|
||||
// level. push the new level onto the stack with a
|
||||
// dummy value (boolean true)...
|
||||
array_push($stack, true);
|
||||
|
||||
$return .= "\n\n";
|
||||
|
||||
// ...and add a start token to the return.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start',
|
||||
'level' => $level - 1,
|
||||
'css' => $css
|
||||
)
|
||||
);
|
||||
|
||||
$return .= "\n\n";
|
||||
}
|
||||
|
||||
// remove a level?
|
||||
while (count($stack) > $level) {
|
||||
|
||||
// as long as the stack count is greater than the
|
||||
// current indent level, we need to end list types.
|
||||
// continue adding end-list tokens until the stack count
|
||||
// and the indent level are the same.
|
||||
array_pop($stack);
|
||||
|
||||
$return .= "\n\n";
|
||||
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'end',
|
||||
'level' => count($stack)
|
||||
)
|
||||
);
|
||||
|
||||
$return .= "\n\n";
|
||||
}
|
||||
|
||||
// add the line text.
|
||||
$return .= $text . "\n";
|
||||
}
|
||||
|
||||
// the last line may have been indented. go through the stack
|
||||
// and create end-tokens until the stack is empty.
|
||||
$return .= "\n\n";
|
||||
|
||||
while (count($stack) > 0) {
|
||||
array_pop($stack);
|
||||
|
||||
$return .= "\n\n";
|
||||
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'end',
|
||||
'level' => count($stack)
|
||||
)
|
||||
);
|
||||
|
||||
$return .= "\n\n";
|
||||
}
|
||||
|
||||
// we're done! send back the replacement text.
|
||||
return "\n\n$return\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,81 +1,81 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Justin Patrin <papercrane@reversefold.com>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Box.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Rule to find source text marked for
|
||||
* strong emphasis (bold) as defined by text surrounded by three
|
||||
* single-quotes. On parsing, the text itself is left in place, but the
|
||||
* starting and ending instances of three single-quotes are replaced with
|
||||
* tokens.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Justin Patrin <papercrane@reversefold.com>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Box extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n\[\d+\].*/s';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* emphasized text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A pair of delimited tokens to be used as a placeholder in
|
||||
* the source text surrounding the text to be emphasized.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$start = $this->wiki->addToken($this->rule, array('type' => 'start', 'css' => 'footnotes'));
|
||||
$end = $this->wiki->addToken($this->rule, array('type' => 'end'));
|
||||
return $start . $matches[0] . "\n" . $end . "\n\n";
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Justin Patrin <papercrane@reversefold.com>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Box.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Rule to find source text marked for
|
||||
* strong emphasis (bold) as defined by text surrounded by three
|
||||
* single-quotes. On parsing, the text itself is left in place, but the
|
||||
* starting and ending instances of three single-quotes are replaced with
|
||||
* tokens.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Justin Patrin <papercrane@reversefold.com>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Box extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n\[\d+\].*/s';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* emphasized text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A pair of delimited tokens to be used as a placeholder in
|
||||
* the source text surrounding the text to be emphasized.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$start = $this->wiki->addToken($this->rule, array('type' => 'start', 'css' => 'footnotes'));
|
||||
$end = $this->wiki->addToken($this->rule, array('type' => 'end'));
|
||||
return $start . $matches[0] . "\n" . $end . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,73 +1,73 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for explicit line breaks.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Break.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for explicit line breaks.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to mark forced line breaks in the
|
||||
* source text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Break extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
//var $regex = "/[ \n]*([\\\][\\\]|\%\%\%)[ \n]*/";
|
||||
var $regex = "/ *([\\\][\\\]|\%\%\%)\n?/";
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A delimited token to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $this->wiki->addToken($this->rule);
|
||||
}
|
||||
}
|
||||
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for explicit line breaks.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Break.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for explicit line breaks.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to mark forced line breaks in the
|
||||
* source text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Break extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
//var $regex = "/[ \n]*([\\\][\\\]|\%\%\%)[ \n]*/";
|
||||
var $regex = "/ *([\\\][\\\]|\%\%\%)\n?/";
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A delimited token to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $this->wiki->addToken($this->rule);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,78 +1,78 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for centered text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked to
|
||||
* be a center element, as defined by text on a line by itself prefixed
|
||||
* with an exclamation mark (!).
|
||||
* The centered text itself is left in the source, but is prefixed and
|
||||
* suffixed with delimited tokens marking its start and end.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Center.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Center extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^! *(.*?)$/m';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* centered text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A pair of delimited tokens to be used as a
|
||||
* placeholder in the source text surrounding the centered text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start'
|
||||
)
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'end'
|
||||
)
|
||||
);
|
||||
|
||||
return $start . trim($matches[1]) . $end . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for centered text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked to
|
||||
* be a center element, as defined by text on a line by itself prefixed
|
||||
* with an exclamation mark (!).
|
||||
* The centered text itself is left in the source, but is prefixed and
|
||||
* suffixed with delimited tokens marking its start and end.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Center.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Center extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^! *(.*?)$/m';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* centered text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A pair of delimited tokens to be used as a
|
||||
* placeholder in the source text surrounding the centered text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start'
|
||||
)
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'end'
|
||||
)
|
||||
);
|
||||
|
||||
return $start . trim($matches[1]) . $end . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,68 +1,68 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for Text_Wiki delimiter characters already in the source text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find instances of the delimiter
|
||||
* character already embedded in the source text; it extracts them and replaces
|
||||
* them with a delimited token, then renders them as the delimiter itself
|
||||
* when the target format is XHTML.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Delimiter.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Delimiter extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor. Overrides the Text_Wiki_Parse constructor so that we
|
||||
* can set the $regex property dynamically (we need to include the
|
||||
* Text_Wiki $delim character.
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
* @param string $name The token name to use for this rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Parse_Delimiter(&$obj)
|
||||
{
|
||||
parent::Text_Wiki_Parse($obj);
|
||||
$this->regex = '/' . $this->wiki->delim . '/';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a token entry for the matched text. Token options are:
|
||||
*
|
||||
* 'text' => The full matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A delimited token number to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('text' => $this->wiki->delim)
|
||||
);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for Text_Wiki delimiter characters already in the source text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find instances of the delimiter
|
||||
* character already embedded in the source text; it extracts them and replaces
|
||||
* them with a delimited token, then renders them as the delimiter itself
|
||||
* when the target format is XHTML.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Delimiter.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Delimiter extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor. Overrides the Text_Wiki_Parse constructor so that we
|
||||
* can set the $regex property dynamically (we need to include the
|
||||
* Text_Wiki $delim character.
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
* @param string $name The token name to use for this rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Parse_Delimiter(&$obj)
|
||||
{
|
||||
parent::Text_Wiki_Parse($obj);
|
||||
$this->regex = '/' . $this->wiki->delim . '/';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a token entry for the matched text. Token options are:
|
||||
*
|
||||
* 'text' => The full matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A delimited token number to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('text' => $this->wiki->delim)
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,83 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Rule to find source text marked for
|
||||
* strong emphasis (bold) as defined by text surrounded by two
|
||||
* stars. On parsing, the text itself is left in place, but the
|
||||
* starting and ending instances of two stars are replaced with
|
||||
* tokens.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Footnote.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Footnote extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = "/(\n)*\[([0-9]+)\]/";
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* emphasized text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A pair of delimited tokens to be used as a placeholder in
|
||||
* the source text surrounding the text to be emphasized.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$id = $matches[2];
|
||||
|
||||
if ($matches[1] == "\n") {
|
||||
$matches[1] = "\n\n";
|
||||
$name = "fn$id";
|
||||
$href = "#ref$id";
|
||||
}
|
||||
else {
|
||||
$name = "ref$id";
|
||||
$href = "#fn$id";
|
||||
}
|
||||
|
||||
$token = $this->wiki->addToken(
|
||||
'Url',
|
||||
array('text' => "[$id]", 'href' => $href, 'name' => $name, 'type' => 'inline')
|
||||
);
|
||||
|
||||
return $matches[1] . $token;
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Rule to find source text marked for
|
||||
* strong emphasis (bold) as defined by text surrounded by two
|
||||
* stars. On parsing, the text itself is left in place, but the
|
||||
* starting and ending instances of two stars are replaced with
|
||||
* tokens.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Footnote.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Footnote extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = "/(\n)*\[([0-9]+)\]/";
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* emphasized text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A pair of delimited tokens to be used as a placeholder in
|
||||
* the source text surrounding the text to be emphasized.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$id = $matches[2];
|
||||
|
||||
if ($matches[1] == "\n") {
|
||||
$matches[1] = "\n\n";
|
||||
$name = "fn$id";
|
||||
$href = "#ref$id";
|
||||
}
|
||||
else {
|
||||
$name = "ref$id";
|
||||
$href = "#fn$id";
|
||||
}
|
||||
|
||||
$token = $this->wiki->addToken(
|
||||
'Url',
|
||||
array('text' => "[$id]", 'href' => $href, 'name' => $name, 'type' => 'inline')
|
||||
);
|
||||
|
||||
return $matches[1] . $token;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,97 +1,97 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for heading text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked to
|
||||
* be a heading element, as defined by text on a line by itself prefixed
|
||||
* with a number of equasl signs (=), determining the heading level.
|
||||
* Equal signs at the end of the line are silently removed.
|
||||
* The heading text itself is left in the source, but is prefixed and
|
||||
* suffixed with delimited tokens marking the start and end of the heading.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Heading.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Heading extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^(={1,6}) *(.*?) *=*$/m';
|
||||
|
||||
var $conf = array(
|
||||
'id_prefix' => 'toc'
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* heading text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A pair of delimited tokens to be used as a
|
||||
* placeholder in the source text surrounding the heading text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// keep a running count for header IDs. we use this later
|
||||
// when constructing TOC entries, etc.
|
||||
static $id;
|
||||
if (! isset($id)) {
|
||||
$id = 0;
|
||||
}
|
||||
|
||||
$prefix = htmlspecialchars($this->getConf('id_prefix'));
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start',
|
||||
'level' => strlen($matches[1]),
|
||||
'text' => trim($matches[2]),
|
||||
'id' => $prefix . $id ++
|
||||
)
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'end',
|
||||
'level' => strlen($matches[1])
|
||||
)
|
||||
);
|
||||
|
||||
return $start . trim($matches[2]) . $end . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for heading text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked to
|
||||
* be a heading element, as defined by text on a line by itself prefixed
|
||||
* with a number of equasl signs (=), determining the heading level.
|
||||
* Equal signs at the end of the line are silently removed.
|
||||
* The heading text itself is left in the source, but is prefixed and
|
||||
* suffixed with delimited tokens marking the start and end of the heading.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Heading.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Heading extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^(={1,6}) *(.*?) *=*$/m';
|
||||
|
||||
var $conf = array(
|
||||
'id_prefix' => 'toc'
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* heading text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A pair of delimited tokens to be used as a
|
||||
* placeholder in the source text surrounding the heading text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// keep a running count for header IDs. we use this later
|
||||
// when constructing TOC entries, etc.
|
||||
static $id;
|
||||
if (! isset($id)) {
|
||||
$id = 0;
|
||||
}
|
||||
|
||||
$prefix = htmlspecialchars($this->getConf('id_prefix'));
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start',
|
||||
'level' => strlen($matches[1]),
|
||||
'text' => trim($matches[2]),
|
||||
'id' => $prefix . $id ++
|
||||
)
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'end',
|
||||
'level' => strlen($matches[1])
|
||||
)
|
||||
);
|
||||
|
||||
return $start . trim($matches[2]) . $end . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,58 +1,58 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for horizontal ruling lines.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked to
|
||||
* be a horizontal rule, as defined by four dashed on their own line.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Horiz.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Horiz extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^([-]{4,})$/m';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token marking the horizontal rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return "\n" . $this->wiki->addToken($this->rule) . "\n";
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for horizontal ruling lines.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked to
|
||||
* be a horizontal rule, as defined by four dashed on their own line.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Horiz.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Horiz extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/^([-]{4,})$/m';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token marking the horizontal rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return "\n" . $this->wiki->addToken($this->rule) . "\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,66 +1,66 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parse for images in the source text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Image.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class Text_Wiki_Parse_Image extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/{{(.*)(\|(.*))?}}/U';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token marking the horizontal rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$src = trim($matches[1]);
|
||||
$src = ltrim($src, '/');
|
||||
$alt = isset($matches[3]) ? trim($matches[3]) : null;
|
||||
if (!$alt) $alt = $src;
|
||||
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'src' => $src,
|
||||
'attr' => array('alt' => $alt, 'title' => $alt)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parse for images in the source text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Image.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class Text_Wiki_Parse_Image extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/{{(.*)(\|(.*))?}}/U';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token marking the horizontal rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$src = trim($matches[1]);
|
||||
$src = ltrim($src, '/');
|
||||
$alt = isset($matches[3]) ? trim($matches[3]) : null;
|
||||
if (!$alt) $alt = $src;
|
||||
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'src' => $src,
|
||||
'attr' => array('alt' => $alt, 'title' => $alt)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,244 +1,244 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bulleted and numbered lists.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked as
|
||||
* a bulleted or numbered list. In short, if a line starts with '*' then
|
||||
* it is a bullet list item; if a line starts with '#' then it is a
|
||||
* number list item. Multiple * or # indicate an indented sub-list.
|
||||
* The list items must be on sequential lines, and are ended by blank lines.
|
||||
* Using a non-* non-# character at the beginning of a line ends the list.
|
||||
* Note that single newline characters may be eaten beforehand by other rules.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Justin Patrin <papercrane@reversefold.com>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: List.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_List extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n((\*[^\#\-\*]|\-[^\-\d\*\#]|\#[^\#\-\*]).*?)\n(?![\*\-#])/s';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' =>
|
||||
* 'bullet_start' : the start of a bullet list
|
||||
* 'bullet_end' : the end of a bullet list
|
||||
* 'number_start' : the start of a number list
|
||||
* 'number_end' : the end of a number list
|
||||
* 'item_start' : the start of item text (bullet or number)
|
||||
* 'item_end' : the end of item text (bullet or number)
|
||||
* 'unknown' : unknown type of list or item
|
||||
*
|
||||
* 'level' => the indent level (0 for the first level, 1 for the
|
||||
* second, etc)
|
||||
*
|
||||
* 'count' => the list item number at this level. not needed for
|
||||
* xhtml, but very useful for PDF and RTF.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A series of text and delimited tokens marking the different
|
||||
* list text and list elements.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// the replacement text we will return
|
||||
$return = '';
|
||||
|
||||
// the list of post-processing matches
|
||||
$list = array();
|
||||
|
||||
// a stack of list-start and list-end types; we keep this
|
||||
// so that we know what kind of list we're working with
|
||||
// (bullet or number) and what indent level we're at.
|
||||
$stack = array();
|
||||
|
||||
// the item count is the number of list items for any
|
||||
// given list-type on the stack
|
||||
$itemcount = array();
|
||||
|
||||
// have we processed the very first list item?
|
||||
$pastFirst = false;
|
||||
|
||||
// populate $list with this set of matches. $matches[1] is the
|
||||
// text matched as a list set by parse().
|
||||
preg_match_all(
|
||||
'/^((\*|\-|#)+) *(.*?)$/ms',
|
||||
$matches[1],
|
||||
$list,
|
||||
PREG_SET_ORDER
|
||||
);
|
||||
|
||||
if (count($list) === 1 && $matches[0][0] === '*' && $matches[0][1] !== ' ' && strpos($matches[0], '*', 1)) {
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
// loop through each list-item element.
|
||||
foreach ($list as $key => $val) {
|
||||
// $val[0] is the full matched list-item line
|
||||
// $val[1] is the level (number)
|
||||
// $val[2] is the type (* or #)
|
||||
// $val[3] is the list item text
|
||||
|
||||
// how many levels are we indented? (1 means the "root"
|
||||
// list level, no indenting.)
|
||||
$stars = $val[1];
|
||||
$level = strlen($stars);
|
||||
$last = $stars[strlen($stars) - 1];
|
||||
|
||||
// get the list item type
|
||||
if ($last == '*' || $last == '-') {
|
||||
$type = 'bullet';
|
||||
} elseif ($last == '#') {
|
||||
$type = 'number';
|
||||
} else {
|
||||
$type = 'unknown';
|
||||
}
|
||||
|
||||
// get the text of the list item
|
||||
$text = $val[3];
|
||||
|
||||
// remove a level from the list?
|
||||
while (count($stack) > $level || (count($stack) == $level && $type != $stack[$level - 1])) {
|
||||
|
||||
// so we don't keep counting the stack, we set up a temp
|
||||
// var for the count. -1 becuase we're going to pop the
|
||||
// stack in the next command. $tmp will then equal the
|
||||
// current level of indent.
|
||||
$tmp = count($stack) - 1;
|
||||
|
||||
// as long as the stack count is greater than the
|
||||
// current indent level, we need to end list types.
|
||||
// continue adding end-list tokens until the stack count
|
||||
// and the indent level are the same.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => array_pop($stack) . '_list_end',
|
||||
'level' => $tmp
|
||||
)
|
||||
);
|
||||
|
||||
// reset to the current (previous) list type so that
|
||||
// the new list item matches the proper list type.
|
||||
if ($tmp) {
|
||||
$oldtype = $stack[$tmp - 1];
|
||||
}
|
||||
|
||||
// reset the item count for the popped indent level
|
||||
unset($itemcount[$tmp + 1]);
|
||||
}
|
||||
|
||||
// add a level to the list?
|
||||
if ($level > count($stack)) {
|
||||
|
||||
// the current indent level is greater than the
|
||||
// number of stack elements, so we must be starting
|
||||
// a new list. push the new list type onto the
|
||||
// stack...
|
||||
array_push($stack, $type);
|
||||
|
||||
// ...and add a list-start token to the return.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => $type . '_list_start',
|
||||
'level' => $level - 1
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// add to the item count for this list (taking into account
|
||||
// which level we are at).
|
||||
if (! isset($itemcount[$level])) {
|
||||
// first count
|
||||
$itemcount[$level] = 0;
|
||||
} else {
|
||||
// increment count
|
||||
$itemcount[$level]++;
|
||||
}
|
||||
|
||||
// is this the very first item in the list?
|
||||
if (! $pastFirst) {
|
||||
$first = true;
|
||||
$pastFirst = true;
|
||||
} else {
|
||||
$first = false;
|
||||
}
|
||||
|
||||
// create a list-item starting token.
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => $type . '_item_start',
|
||||
'level' => $level,
|
||||
'count' => $itemcount[$level],
|
||||
'first' => $first
|
||||
)
|
||||
);
|
||||
|
||||
// create a list-item ending token.
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => $type . '_item_end',
|
||||
'level' => $level,
|
||||
'count' => $itemcount[$level]
|
||||
)
|
||||
);
|
||||
|
||||
// add the starting token, list-item text, and ending token
|
||||
// to the return.
|
||||
$return .= "\n" . $start . $text . $end;
|
||||
}
|
||||
|
||||
// the last list-item may have been indented. go through the
|
||||
// list-type stack and create end-list tokens until the stack
|
||||
// is empty.
|
||||
while (count($stack) > 0) {
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => array_pop($stack) . '_list_end',
|
||||
'level' => count($stack)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// we're done! send back the replacement text.
|
||||
return "\n\n" . $return . "\n\n";
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bulleted and numbered lists.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked as
|
||||
* a bulleted or numbered list. In short, if a line starts with '*' then
|
||||
* it is a bullet list item; if a line starts with '#' then it is a
|
||||
* number list item. Multiple * or # indicate an indented sub-list.
|
||||
* The list items must be on sequential lines, and are ended by blank lines.
|
||||
* Using a non-* non-# character at the beginning of a line ends the list.
|
||||
* Note that single newline characters may be eaten beforehand by other rules.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Justin Patrin <papercrane@reversefold.com>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: List.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_List extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n((\*[^\#\-\*]|\-[^\-\d\*\#]|\#[^\#\-\*]).*?)\n(?![\*\-#])/s';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' =>
|
||||
* 'bullet_start' : the start of a bullet list
|
||||
* 'bullet_end' : the end of a bullet list
|
||||
* 'number_start' : the start of a number list
|
||||
* 'number_end' : the end of a number list
|
||||
* 'item_start' : the start of item text (bullet or number)
|
||||
* 'item_end' : the end of item text (bullet or number)
|
||||
* 'unknown' : unknown type of list or item
|
||||
*
|
||||
* 'level' => the indent level (0 for the first level, 1 for the
|
||||
* second, etc)
|
||||
*
|
||||
* 'count' => the list item number at this level. not needed for
|
||||
* xhtml, but very useful for PDF and RTF.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A series of text and delimited tokens marking the different
|
||||
* list text and list elements.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// the replacement text we will return
|
||||
$return = '';
|
||||
|
||||
// the list of post-processing matches
|
||||
$list = array();
|
||||
|
||||
// a stack of list-start and list-end types; we keep this
|
||||
// so that we know what kind of list we're working with
|
||||
// (bullet or number) and what indent level we're at.
|
||||
$stack = array();
|
||||
|
||||
// the item count is the number of list items for any
|
||||
// given list-type on the stack
|
||||
$itemcount = array();
|
||||
|
||||
// have we processed the very first list item?
|
||||
$pastFirst = false;
|
||||
|
||||
// populate $list with this set of matches. $matches[1] is the
|
||||
// text matched as a list set by parse().
|
||||
preg_match_all(
|
||||
'/^((\*|\-|#)+) *(.*?)$/ms',
|
||||
$matches[1],
|
||||
$list,
|
||||
PREG_SET_ORDER
|
||||
);
|
||||
|
||||
if (count($list) === 1 && $matches[0][0] === '*' && $matches[0][1] !== ' ' && strpos($matches[0], '*', 1)) {
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
// loop through each list-item element.
|
||||
foreach ($list as $key => $val) {
|
||||
// $val[0] is the full matched list-item line
|
||||
// $val[1] is the level (number)
|
||||
// $val[2] is the type (* or #)
|
||||
// $val[3] is the list item text
|
||||
|
||||
// how many levels are we indented? (1 means the "root"
|
||||
// list level, no indenting.)
|
||||
$stars = $val[1];
|
||||
$level = strlen($stars);
|
||||
$last = $stars[strlen($stars) - 1];
|
||||
|
||||
// get the list item type
|
||||
if ($last == '*' || $last == '-') {
|
||||
$type = 'bullet';
|
||||
} elseif ($last == '#') {
|
||||
$type = 'number';
|
||||
} else {
|
||||
$type = 'unknown';
|
||||
}
|
||||
|
||||
// get the text of the list item
|
||||
$text = $val[3];
|
||||
|
||||
// remove a level from the list?
|
||||
while (count($stack) > $level || (count($stack) == $level && $type != $stack[$level - 1])) {
|
||||
|
||||
// so we don't keep counting the stack, we set up a temp
|
||||
// var for the count. -1 becuase we're going to pop the
|
||||
// stack in the next command. $tmp will then equal the
|
||||
// current level of indent.
|
||||
$tmp = count($stack) - 1;
|
||||
|
||||
// as long as the stack count is greater than the
|
||||
// current indent level, we need to end list types.
|
||||
// continue adding end-list tokens until the stack count
|
||||
// and the indent level are the same.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => array_pop($stack) . '_list_end',
|
||||
'level' => $tmp
|
||||
)
|
||||
);
|
||||
|
||||
// reset to the current (previous) list type so that
|
||||
// the new list item matches the proper list type.
|
||||
if ($tmp) {
|
||||
$oldtype = $stack[$tmp - 1];
|
||||
}
|
||||
|
||||
// reset the item count for the popped indent level
|
||||
unset($itemcount[$tmp + 1]);
|
||||
}
|
||||
|
||||
// add a level to the list?
|
||||
if ($level > count($stack)) {
|
||||
|
||||
// the current indent level is greater than the
|
||||
// number of stack elements, so we must be starting
|
||||
// a new list. push the new list type onto the
|
||||
// stack...
|
||||
array_push($stack, $type);
|
||||
|
||||
// ...and add a list-start token to the return.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => $type . '_list_start',
|
||||
'level' => $level - 1
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// add to the item count for this list (taking into account
|
||||
// which level we are at).
|
||||
if (! isset($itemcount[$level])) {
|
||||
// first count
|
||||
$itemcount[$level] = 0;
|
||||
} else {
|
||||
// increment count
|
||||
$itemcount[$level]++;
|
||||
}
|
||||
|
||||
// is this the very first item in the list?
|
||||
if (! $pastFirst) {
|
||||
$first = true;
|
||||
$pastFirst = true;
|
||||
} else {
|
||||
$first = false;
|
||||
}
|
||||
|
||||
// create a list-item starting token.
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => $type . '_item_start',
|
||||
'level' => $level,
|
||||
'count' => $itemcount[$level],
|
||||
'first' => $first
|
||||
)
|
||||
);
|
||||
|
||||
// create a list-item ending token.
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => $type . '_item_end',
|
||||
'level' => $level,
|
||||
'count' => $itemcount[$level]
|
||||
)
|
||||
);
|
||||
|
||||
// add the starting token, list-item text, and ending token
|
||||
// to the return.
|
||||
$return .= "\n" . $start . $text . $end;
|
||||
}
|
||||
|
||||
// the last list-item may have been indented. go through the
|
||||
// list-type stack and create end-list tokens until the stack
|
||||
// is empty.
|
||||
while (count($stack) > 0) {
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => array_pop($stack) . '_list_end',
|
||||
'level' => count($stack)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// we're done! send back the replacement text.
|
||||
return "\n\n" . $return . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,60 +1,60 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for implied line breaks indicated by newlines.
|
||||
* Newlines are not considered if followed by another newline
|
||||
* or by one of these chars: * | - # = {
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Newline.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Newline extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
//var $regex = '/(?<!\n)\n(?![\n\#\=\|\-\>\:]|\*[^\*\#]|\*+ )/m';
|
||||
var $regex = '/(?<!\n)\n(?!\n|\#|\*|\=|\||\>|\:|\!|\-\D)/m';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A delimited token to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return ' '; // $this->wiki->addToken($this->rule);
|
||||
}
|
||||
}
|
||||
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for implied line breaks indicated by newlines.
|
||||
* Newlines are not considered if followed by another newline
|
||||
* or by one of these chars: * | - # = {
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Newline.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Newline extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
//var $regex = '/(?<!\n)\n(?![\n\#\=\|\-\>\:]|\*[^\*\#]|\*+ )/m';
|
||||
var $regex = '/(?<!\n)\n(?!\n|\#|\*|\=|\||\>|\:|\!|\-\D)/m';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement token for the matched text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A delimited token to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return ' '; // $this->wiki->addToken($this->rule);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,139 +1,139 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for paragraph blocks.
|
||||
* This class implements a Text_Wiki rule to find sections of the source
|
||||
* text that are paragraphs. A paragraph is any line not starting with a
|
||||
* token delimiter, followed by two newlines.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Paragraph.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Paragraph extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to find source text matching this
|
||||
* rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = "/^.+?\n/m"; // (?=[\n\-\|#{=])
|
||||
|
||||
var $conf = array(
|
||||
'skip' => array(
|
||||
'address',
|
||||
'box',
|
||||
'blockquote',
|
||||
'code',
|
||||
'heading',
|
||||
'center',
|
||||
'horiz',
|
||||
'deflist',
|
||||
'table',
|
||||
'list',
|
||||
'paragraph',
|
||||
'preformatted',
|
||||
'toc'
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a token entry for the matched text. Token options are:
|
||||
*
|
||||
* 'start' => The starting point of the paragraph.
|
||||
*
|
||||
* 'end' => The ending point of the paragraph.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A delimited token number to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$delim = $this->wiki->delim;
|
||||
|
||||
// was anything there?
|
||||
if (trim($matches[0]) == '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
// does the match start with a delimiter?
|
||||
if (substr($matches[0], 0, 1) != $delim) {
|
||||
// no.
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . trim($matches[0]) . $end;
|
||||
}
|
||||
|
||||
// the line starts with a delimiter. read in the delimited
|
||||
// token number, check the token, and see if we should
|
||||
// skip it.
|
||||
|
||||
// loop starting at the second character (we already know
|
||||
// the first is a delimiter) until we find another
|
||||
// delimiter; the text between them is a token key number.
|
||||
$key = '';
|
||||
$len = strlen($matches[0]);
|
||||
for ($i = 1; $i < $len; $i++) {
|
||||
$char = $matches[0]{$i};
|
||||
if ($char == $delim) {
|
||||
break;
|
||||
} else {
|
||||
$key .= $char;
|
||||
}
|
||||
}
|
||||
|
||||
// look at the token and see if it's skippable (if we skip,
|
||||
// it will not be marked as a paragraph)
|
||||
$token_type = strtolower($this->wiki->tokens[$key][0]);
|
||||
$skip = $this->getConf('skip', array());
|
||||
|
||||
if (in_array($token_type, $skip)) {
|
||||
// this type of token should not have paragraphs applied to it.
|
||||
// return the entire matched text.
|
||||
return $matches[0];
|
||||
} else {
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . trim($matches[0]) . $end;
|
||||
}
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for paragraph blocks.
|
||||
* This class implements a Text_Wiki rule to find sections of the source
|
||||
* text that are paragraphs. A paragraph is any line not starting with a
|
||||
* token delimiter, followed by two newlines.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Paragraph.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Paragraph extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to find source text matching this
|
||||
* rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = "/^.+?\n/m"; // (?=[\n\-\|#{=])
|
||||
|
||||
var $conf = array(
|
||||
'skip' => array(
|
||||
'address',
|
||||
'box',
|
||||
'blockquote',
|
||||
'code',
|
||||
'heading',
|
||||
'center',
|
||||
'horiz',
|
||||
'deflist',
|
||||
'table',
|
||||
'list',
|
||||
'paragraph',
|
||||
'preformatted',
|
||||
'toc'
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a token entry for the matched text. Token options are:
|
||||
*
|
||||
* 'start' => The starting point of the paragraph.
|
||||
*
|
||||
* 'end' => The ending point of the paragraph.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A delimited token number to be used as a placeholder in
|
||||
* the source text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$delim = $this->wiki->delim;
|
||||
|
||||
// was anything there?
|
||||
if (trim($matches[0]) == '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
// does the match start with a delimiter?
|
||||
if (substr($matches[0], 0, 1) != $delim) {
|
||||
// no.
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . trim($matches[0]) . $end;
|
||||
}
|
||||
|
||||
// the line starts with a delimiter. read in the delimited
|
||||
// token number, check the token, and see if we should
|
||||
// skip it.
|
||||
|
||||
// loop starting at the second character (we already know
|
||||
// the first is a delimiter) until we find another
|
||||
// delimiter; the text between them is a token key number.
|
||||
$key = '';
|
||||
$len = strlen($matches[0]);
|
||||
for ($i = 1; $i < $len; $i++) {
|
||||
$char = $matches[0]{$i};
|
||||
if ($char == $delim) {
|
||||
break;
|
||||
} else {
|
||||
$key .= $char;
|
||||
}
|
||||
}
|
||||
|
||||
// look at the token and see if it's skippable (if we skip,
|
||||
// it will not be marked as a paragraph)
|
||||
$token_type = strtolower($this->wiki->tokens[$key][0]);
|
||||
$skip = $this->getConf('skip', array());
|
||||
|
||||
if (in_array($token_type, $skip)) {
|
||||
// this type of token should not have paragraphs applied to it.
|
||||
// return the entire matched text.
|
||||
return $matches[0];
|
||||
} else {
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule, array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . trim($matches[0]) . $end;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,54 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* "Pre-filter" the source text.
|
||||
*
|
||||
* Convert DOS and Mac line endings to Unix, convert tabs to 4-spaces,
|
||||
* add newlines to the top and end of the source text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Prefilter.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Prefilter extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple parsing method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
*/
|
||||
|
||||
function parse()
|
||||
{
|
||||
// convert DOS line endings
|
||||
$this->wiki->source = str_replace("\r\n", "\n",
|
||||
$this->wiki->source);
|
||||
|
||||
// convert Macintosh line endings
|
||||
$this->wiki->source = str_replace("\r", "\n",
|
||||
$this->wiki->source);
|
||||
|
||||
// convert tabs to four-spaces
|
||||
$this->wiki->source = str_replace("\t", " ",
|
||||
$this->wiki->source);
|
||||
|
||||
// add extra newlines at the top and end; this
|
||||
// seems to help many rules.
|
||||
$this->wiki->source = "\n\n" . $this->wiki->source . "\n\n";
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* "Pre-filter" the source text.
|
||||
*
|
||||
* Convert DOS and Mac line endings to Unix, convert tabs to 4-spaces,
|
||||
* add newlines to the top and end of the source text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Prefilter.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Prefilter extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple parsing method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
*/
|
||||
|
||||
function parse()
|
||||
{
|
||||
// convert DOS line endings
|
||||
$this->wiki->source = str_replace("\r\n", "\n",
|
||||
$this->wiki->source);
|
||||
|
||||
// convert Macintosh line endings
|
||||
$this->wiki->source = str_replace("\r", "\n",
|
||||
$this->wiki->source);
|
||||
|
||||
// convert tabs to four-spaces
|
||||
$this->wiki->source = str_replace("\t", " ",
|
||||
$this->wiki->source);
|
||||
|
||||
// add extra newlines at the top and end; this
|
||||
// seems to help many rules.
|
||||
$this->wiki->source = "\n\n" . $this->wiki->source . "\n\n";
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -1,68 +1,68 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for preformatted text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Preformatted.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Preformatted extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n{{{\n(.*)\n}}}\n/Us';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'text' => The preformatted text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// > any line consisting of only indented three closing curly braces
|
||||
// > will have one space removed from the indentation
|
||||
// > -- http://www.wikicreole.org/wiki/AddNoWikiEscapeProposal
|
||||
$find = "/\n( *) }}}/";
|
||||
$replace = "\n$1}}}";
|
||||
$matches[1] = preg_replace($find, $replace, $matches[1]);
|
||||
|
||||
$token = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('text' => $matches[1])
|
||||
);
|
||||
return "\n\n" . $token . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for preformatted text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Preformatted.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Preformatted extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n{{{\n(.*)\n}}}\n/Us';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'text' => The preformatted text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// > any line consisting of only indented three closing curly braces
|
||||
// > will have one space removed from the indentation
|
||||
// > -- http://www.wikicreole.org/wiki/AddNoWikiEscapeProposal
|
||||
$find = "/\n( *) }}}/";
|
||||
$replace = "\n$1}}}";
|
||||
$matches[1] = preg_replace($find, $replace, $matches[1]);
|
||||
|
||||
$token = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('text' => $matches[1])
|
||||
);
|
||||
return "\n\n" . $token . "\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,61 +1,61 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for monospaced inline text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Raw.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Raw extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/~~([^ \n])/';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* monospaced text. The text itself is encapsulated into a Raw token.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('text' => $matches[1], 'type' => 'escape')
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for monospaced inline text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Raw.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Raw extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/~~([^ \n])/';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* monospaced text. The text itself is encapsulated into a Raw token.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('text' => $matches[1], 'type' => 'escape')
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Rule to find source text marked for
|
||||
* strong emphasis (bold) as defined by text surrounded by two
|
||||
* stars. On parsing, the text itself is left in place, but the
|
||||
* starting and ending instances of two stars are replaced with
|
||||
* tokens.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Strong.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Strong extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
//var $regex = "/\*\*(.*?)\*\*/";
|
||||
var $regex = "/(?:\*\*(.+?)\*\*|(?:(?<=[\W_\xFF])\*(?![ \*]))(.+?)(?:(?<![ \*])\*(?=[\W_\xFF])))/";
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* emphasized text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A pair of delimited tokens to be used as a placeholder in
|
||||
* the source text surrounding the text to be emphasized.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$text = $matches[1] ? $matches[1] : $matches[2];
|
||||
|
||||
if (! $this->wiki->checkInnerTags($text)) {
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . $text . $end;
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for bold text.
|
||||
*
|
||||
* This class implements a Text_Wiki_Rule to find source text marked for
|
||||
* strong emphasis (bold) as defined by text surrounded by two
|
||||
* stars. On parsing, the text itself is left in place, but the
|
||||
* starting and ending instances of two stars are replaced with
|
||||
* tokens.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Strong.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Strong extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
//var $regex = "/\*\*(.*?)\*\*/";
|
||||
var $regex = "/(?:\*\*(.+?)\*\*|(?:(?<=[\W_\xFF])\*(?![ \*]))(.+?)(?:(?<![ \*])\*(?=[\W_\xFF])))/";
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* emphasized text. The text itself is left in the source.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A pair of delimited tokens to be used as a placeholder in
|
||||
* the source text surrounding the text to be emphasized.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
$text = $matches[1] ? $matches[1] : $matches[2];
|
||||
|
||||
if (! $this->wiki->checkInnerTags($text)) {
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'start')
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . $text . $end;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,207 +1,207 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for table markup.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked as
|
||||
* a set of table rows, where a line start (and optionally ends) with a
|
||||
* single-pipe (|) and uses single-pipes to separate table cells.
|
||||
* The rows must be on sequential lines (no blank lines between them).
|
||||
* A blank line indicates the beginning of other text or another table.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Table.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class Text_Wiki_Parse_Table extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n((\|).*)(\n)(?!(\|))/Us';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text.
|
||||
*
|
||||
* Token options are:
|
||||
*
|
||||
* 'type' =>
|
||||
* 'table_start' : the start of a bullet list
|
||||
* 'table_end' : the end of a bullet list
|
||||
* 'row_start' : the start of a number list
|
||||
* 'row_end' : the end of a number list
|
||||
* 'cell_start' : the start of item text (bullet or number)
|
||||
* 'cell_end' : the end of item text (bullet or number)
|
||||
*
|
||||
* 'cols' => the number of columns in the table (for 'table_start')
|
||||
*
|
||||
* 'rows' => the number of rows in the table (for 'table_start')
|
||||
*
|
||||
* 'span' => column span (for 'cell_start')
|
||||
*
|
||||
* 'attr' => column attribute flag (for 'cell_start')
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A series of text and delimited tokens marking the different
|
||||
* table elements and cell text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// our eventual return value
|
||||
$return = '';
|
||||
|
||||
// the number of columns in the table
|
||||
$num_cols = 0;
|
||||
|
||||
// the number of rows in the table
|
||||
$num_rows = 0;
|
||||
|
||||
// rows are separated by newlines in the matched text
|
||||
$rows = explode("\n", $matches[1]);
|
||||
|
||||
// loop through each row
|
||||
foreach ($rows as $row) {
|
||||
|
||||
// increase the row count
|
||||
$num_rows ++;
|
||||
|
||||
// remove first and last (optional) pipe
|
||||
$row = substr($row, 1);
|
||||
if ($row[strlen($row) - 1] == '|') {
|
||||
$row = substr($row, 0, -1);
|
||||
}
|
||||
|
||||
// cells are separated by pipes
|
||||
$cells = explode("|", $row);
|
||||
|
||||
if (count($cells) == 1 && $cells[0][0] == '=' && ($num_rows == 1 || $num_rows == count($rows)) && ! $caption) {
|
||||
$caption = trim(trim($cells[0], '='));
|
||||
|
||||
// start the caption...
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array ('type' => 'caption_start')
|
||||
);
|
||||
|
||||
// ...add the content...
|
||||
$return .= $caption;
|
||||
|
||||
// ...and end the caption.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array ('type' => 'caption_end')
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
||||
// update the column count
|
||||
if (count($cells) > $num_cols) {
|
||||
$num_cols = count($cells);
|
||||
}
|
||||
|
||||
// start a new row
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'row_start')
|
||||
);
|
||||
|
||||
for ($i = 0; $i < count($cells); $i++) {
|
||||
$cell = $cells[$i];
|
||||
|
||||
// by default, cells span only one column (their own)
|
||||
$span = 1;
|
||||
$attr = '';
|
||||
|
||||
while ($i + 1 < count($cells) && ! strlen($cells[$i + 1])) {
|
||||
$i++;
|
||||
$span++;
|
||||
}
|
||||
|
||||
if ($cell[0] == '=') {
|
||||
$attr = 'header';
|
||||
$cell = trim($cell, '=');
|
||||
}
|
||||
|
||||
// start a new cell...
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'cell_start',
|
||||
'attr' => $attr,
|
||||
'span' => $span
|
||||
)
|
||||
);
|
||||
|
||||
// ...add the content...
|
||||
$return .= trim($cell);
|
||||
|
||||
// ...and end the cell.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'cell_end',
|
||||
'attr' => $attr,
|
||||
'span' => $span
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// end the row
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'row_end')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// we're done!
|
||||
return
|
||||
"\n\n".
|
||||
$this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'table_start',
|
||||
'rows' => $num_rows,
|
||||
'cols' => $num_cols
|
||||
)
|
||||
).
|
||||
$return.
|
||||
$this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'table_end'
|
||||
)
|
||||
).
|
||||
"\n\n";
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for table markup.
|
||||
*
|
||||
* This class implements a Text_Wiki_Parse to find source text marked as
|
||||
* a set of table rows, where a line start (and optionally ends) with a
|
||||
* single-pipe (|) and uses single-pipes to separate table cells.
|
||||
* The rows must be on sequential lines (no blank lines between them).
|
||||
* A blank line indicates the beginning of other text or another table.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Table.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class Text_Wiki_Parse_Table extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/\n((\|).*)(\n)(?!(\|))/Us';
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text.
|
||||
*
|
||||
* Token options are:
|
||||
*
|
||||
* 'type' =>
|
||||
* 'table_start' : the start of a bullet list
|
||||
* 'table_end' : the end of a bullet list
|
||||
* 'row_start' : the start of a number list
|
||||
* 'row_end' : the end of a number list
|
||||
* 'cell_start' : the start of item text (bullet or number)
|
||||
* 'cell_end' : the end of item text (bullet or number)
|
||||
*
|
||||
* 'cols' => the number of columns in the table (for 'table_start')
|
||||
*
|
||||
* 'rows' => the number of rows in the table (for 'table_start')
|
||||
*
|
||||
* 'span' => column span (for 'cell_start')
|
||||
*
|
||||
* 'attr' => column attribute flag (for 'cell_start')
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return A series of text and delimited tokens marking the different
|
||||
* table elements and cell text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// our eventual return value
|
||||
$return = '';
|
||||
|
||||
// the number of columns in the table
|
||||
$num_cols = 0;
|
||||
|
||||
// the number of rows in the table
|
||||
$num_rows = 0;
|
||||
|
||||
// rows are separated by newlines in the matched text
|
||||
$rows = explode("\n", $matches[1]);
|
||||
|
||||
// loop through each row
|
||||
foreach ($rows as $row) {
|
||||
|
||||
// increase the row count
|
||||
$num_rows ++;
|
||||
|
||||
// remove first and last (optional) pipe
|
||||
$row = substr($row, 1);
|
||||
if ($row[strlen($row) - 1] == '|') {
|
||||
$row = substr($row, 0, -1);
|
||||
}
|
||||
|
||||
// cells are separated by pipes
|
||||
$cells = explode("|", $row);
|
||||
|
||||
if (count($cells) == 1 && $cells[0][0] == '=' && ($num_rows == 1 || $num_rows == count($rows)) && ! $caption) {
|
||||
$caption = trim(trim($cells[0], '='));
|
||||
|
||||
// start the caption...
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array ('type' => 'caption_start')
|
||||
);
|
||||
|
||||
// ...add the content...
|
||||
$return .= $caption;
|
||||
|
||||
// ...and end the caption.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array ('type' => 'caption_end')
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
||||
// update the column count
|
||||
if (count($cells) > $num_cols) {
|
||||
$num_cols = count($cells);
|
||||
}
|
||||
|
||||
// start a new row
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'row_start')
|
||||
);
|
||||
|
||||
for ($i = 0; $i < count($cells); $i++) {
|
||||
$cell = $cells[$i];
|
||||
|
||||
// by default, cells span only one column (their own)
|
||||
$span = 1;
|
||||
$attr = '';
|
||||
|
||||
while ($i + 1 < count($cells) && ! strlen($cells[$i + 1])) {
|
||||
$i++;
|
||||
$span++;
|
||||
}
|
||||
|
||||
if ($cell[0] == '=') {
|
||||
$attr = 'header';
|
||||
$cell = trim($cell, '=');
|
||||
}
|
||||
|
||||
// start a new cell...
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'cell_start',
|
||||
'attr' => $attr,
|
||||
'span' => $span
|
||||
)
|
||||
);
|
||||
|
||||
// ...add the content...
|
||||
$return .= trim($cell);
|
||||
|
||||
// ...and end the cell.
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array (
|
||||
'type' => 'cell_end',
|
||||
'attr' => $attr,
|
||||
'span' => $span
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// end the row
|
||||
$return .= $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'row_end')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// we're done!
|
||||
return
|
||||
"\n\n".
|
||||
$this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'table_start',
|
||||
'rows' => $num_rows,
|
||||
'cols' => $num_cols
|
||||
)
|
||||
).
|
||||
$return.
|
||||
$this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'table_end'
|
||||
)
|
||||
).
|
||||
"\n\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,37 +1,37 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* The rule removes all remaining newlines.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Tighten.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class Text_Wiki_Parse_Tighten extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Apply tightening directly to the source text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
*/
|
||||
|
||||
function parse()
|
||||
{
|
||||
$this->wiki->source = str_replace("\n", '',
|
||||
$this->wiki->source);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* The rule removes all remaining newlines.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Tighten.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class Text_Wiki_Parse_Tighten extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Apply tightening directly to the source text.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
*/
|
||||
|
||||
function parse()
|
||||
{
|
||||
$this->wiki->source = str_replace("\n", '',
|
||||
$this->wiki->source);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,78 +1,78 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for monospaced inline text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Tt.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Tt extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/{{{(.*?)}}}(?!}|{{{)/';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* monospaced text. The text itself is encapsulated into a Raw token.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// remove the sequence }}}{{{
|
||||
$find = "/}}}{{{/";
|
||||
$replace = "";
|
||||
$matches[1] = preg_replace($find, $replace, $matches[1]);
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'start')
|
||||
);
|
||||
|
||||
$raw = $this->wiki->addToken(
|
||||
'Raw',
|
||||
array('text' => $matches[1])
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . $raw . $end;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses for monospaced inline text.
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Tomaiuolo Michele <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Tt.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Tt extends Text_Wiki_Parse {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The regular expression used to parse the source text and find
|
||||
* matches conforming to this rule. Used by the parse() method.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @see parse()
|
||||
*
|
||||
*/
|
||||
|
||||
var $regex = '/{{{(.*?)}}}(?!}|{{{)/';
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text. Token options are:
|
||||
*
|
||||
* 'type' => ['start'|'end'] The starting or ending point of the
|
||||
* monospaced text. The text itself is encapsulated into a Raw token.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
// remove the sequence }}}{{{
|
||||
$find = "/}}}{{{/";
|
||||
$replace = "";
|
||||
$matches[1] = preg_replace($find, $replace, $matches[1]);
|
||||
|
||||
$start = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'start')
|
||||
);
|
||||
|
||||
$raw = $this->wiki->addToken(
|
||||
'Raw',
|
||||
array('text' => $matches[1])
|
||||
);
|
||||
|
||||
$end = $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array('type' => 'end')
|
||||
);
|
||||
|
||||
return $start . $raw . $end;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,109 +1,109 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parse for URLS in the source text.
|
||||
*
|
||||
* raw -- http://example.com
|
||||
* no descr. -- [[http://example.com]]
|
||||
* described -- [[http://example.com|Example Description]]
|
||||
*
|
||||
* When rendering a URL token, this will convert URLs pointing to a .gif,
|
||||
* .jpg, or .png image into an inline <img /> tag (for the 'xhtml'
|
||||
* format).
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Url.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Url extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor. Overrides the Text_Wiki_Parse constructor so that we
|
||||
* can set the $regex property dynamically (we need to include the
|
||||
* Text_Wiki $delim character).
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
* @param string $name The token name to use for this rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Parse_Url(&$obj)
|
||||
{
|
||||
parent::Text_Wiki_Parse($obj);
|
||||
$this->regex = '/((?:\[\[ *((?:http:\/\/|https:\/\/|ftp:\/\/|mailto:|\/)[^\|\]\n ]*)( *\| *([^\]\n]*))? *\]\])|((http:\/\/|https:\/\/|ftp:\/\/|mailto:)[^\'\"\n ' . $this->wiki->delim . ']*[A-Za-z0-9\/\?\=\&\~\_]))/';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text.
|
||||
*
|
||||
* Token options are:
|
||||
*
|
||||
* 'href' => the URL link href portion
|
||||
*
|
||||
* 'text' => the displayed text of the URL link
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
if (isset($matches[2])) $href = trim($matches[2]);
|
||||
if (isset($matches[4])) $text = trim($matches[4]);
|
||||
if (isset($matches[5])) $rawurl = $matches[5];
|
||||
if (empty($href)) $href = $rawurl;
|
||||
|
||||
if (empty($text)) {
|
||||
$text = $href;
|
||||
if (strpos($text, '/') === FALSE) {
|
||||
$text = str_replace('http://', '', $text);
|
||||
$text = str_replace('mailto:', '', $text);
|
||||
}
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'inline',
|
||||
'href' => $href,
|
||||
'text' => $text
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start',
|
||||
'href' => $href,
|
||||
'text' => $text
|
||||
)
|
||||
) . $text .
|
||||
$this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'end',
|
||||
'href' => $href,
|
||||
'text' => $text
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Parse for URLS in the source text.
|
||||
*
|
||||
* raw -- http://example.com
|
||||
* no descr. -- [[http://example.com]]
|
||||
* described -- [[http://example.com|Example Description]]
|
||||
*
|
||||
* When rendering a URL token, this will convert URLs pointing to a .gif,
|
||||
* .jpg, or .png image into an inline <img /> tag (for the 'xhtml'
|
||||
* format).
|
||||
*
|
||||
* @category Text
|
||||
*
|
||||
* @package Text_Wiki
|
||||
*
|
||||
* @author Michele Tomaiuolo <tomamic@yahoo.it>
|
||||
*
|
||||
* @license LGPL
|
||||
*
|
||||
* @version $Id: Url.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
*
|
||||
*/
|
||||
|
||||
class Text_Wiki_Parse_Url extends Text_Wiki_Parse {
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor. Overrides the Text_Wiki_Parse constructor so that we
|
||||
* can set the $regex property dynamically (we need to include the
|
||||
* Text_Wiki $delim character).
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
* @param string $name The token name to use for this rule.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Parse_Url(&$obj)
|
||||
{
|
||||
parent::Text_Wiki_Parse($obj);
|
||||
$this->regex = '/((?:\[\[ *((?:http:\/\/|https:\/\/|ftp:\/\/|mailto:|\/)[^\|\]\n ]*)( *\| *([^\]\n]*))? *\]\])|((http:\/\/|https:\/\/|ftp:\/\/|mailto:)[^\'\"\n ' . $this->wiki->delim . ']*[A-Za-z0-9\/\?\=\&\~\_]))/';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a replacement for the matched text.
|
||||
*
|
||||
* Token options are:
|
||||
*
|
||||
* 'href' => the URL link href portion
|
||||
*
|
||||
* 'text' => the displayed text of the URL link
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param array &$matches The array of matches from parse().
|
||||
*
|
||||
* @return string A token to be used as a placeholder
|
||||
* in the source text for the preformatted text.
|
||||
*
|
||||
*/
|
||||
|
||||
function process(&$matches)
|
||||
{
|
||||
if (isset($matches[2])) $href = trim($matches[2]);
|
||||
if (isset($matches[4])) $text = trim($matches[4]);
|
||||
if (isset($matches[5])) $rawurl = $matches[5];
|
||||
if (empty($href)) $href = $rawurl;
|
||||
|
||||
if (empty($text)) {
|
||||
$text = $href;
|
||||
if (strpos($text, '/') === FALSE) {
|
||||
$text = str_replace('http://', '', $text);
|
||||
$text = str_replace('mailto:', '', $text);
|
||||
}
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'inline',
|
||||
'href' => $href,
|
||||
'text' => $text
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return $this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'start',
|
||||
'href' => $href,
|
||||
'text' => $text
|
||||
)
|
||||
) . $text .
|
||||
$this->wiki->addToken(
|
||||
$this->rule,
|
||||
array(
|
||||
'type' => 'end',
|
||||
'href' => $href,
|
||||
'text' => $text
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -1,72 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* 使用 <a href="http://www.wikicreole.org/" target="_blank">Creole 语法</a>发布文章。改进版本支持中文(utf-8 编码)、并除去不必要的标签。
|
||||
*
|
||||
* @package Creole 解析器(改进版)
|
||||
* @author 明城<i.feelinglucky@gmail.com>
|
||||
* @version 0.2
|
||||
* @link http://www.gracecode.com/
|
||||
*/
|
||||
|
||||
require_once 'Creole/Creole_Wiki.php';
|
||||
|
||||
class Creole_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* 激活插件方法,如果激活失败,直接抛出异常
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function activate() {
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerpt = array('Creole_Plugin', 'parse');
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->content = array('Creole_Plugin', 'parse');
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用插件方法,如果禁用失败,直接抛出异常
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function deactivate() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form 配置面板
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
|
||||
/**
|
||||
* 插件实现方法
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function parse($text, $widget, $lastResult) {
|
||||
$text = empty($lastResult) ? $text : $lastResult;
|
||||
$creole_parse = new Creole_Wiki;
|
||||
return $creole_parse->transform(trim($text));
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* 使用 <a href="http://www.wikicreole.org/" target="_blank">Creole 语法</a>发布文章。改进版本支持中文(utf-8 编码)、并除去不必要的标签。
|
||||
*
|
||||
* @package Creole 解析器(改进版)
|
||||
* @author 明城<i.feelinglucky@gmail.com>
|
||||
* @version 0.2
|
||||
* @link http://www.gracecode.com/
|
||||
*/
|
||||
|
||||
require_once 'Creole/Creole_Wiki.php';
|
||||
|
||||
class Creole_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* 激活插件方法,如果激活失败,直接抛出异常
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function activate() {
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerpt = array('Creole_Plugin', 'parse');
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->content = array('Creole_Plugin', 'parse');
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用插件方法,如果禁用失败,直接抛出异常
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function deactivate() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form 配置面板
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
|
||||
/**
|
||||
* 插件实现方法
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function parse($text, $widget, $lastResult) {
|
||||
$text = empty($lastResult) ? $text : $lastResult;
|
||||
$creole_parse = new Creole_Wiki;
|
||||
return $creole_parse->transform(trim($text));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,218 +1,218 @@
|
||||
<?php
|
||||
// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
|
||||
/**
|
||||
* Base rendering class for parsed and tokenized text.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version CVS: $Id: Render.inc.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
|
||||
/**
|
||||
* Base rendering class for parsed and tokenized text.
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version Release: @package_version@
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
class Text_Wiki_Render {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration options for this render rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $conf = array();
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of this rule's format.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $format = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of this rule's token array elements.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $rule = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* A reference to the calling Text_Wiki object.
|
||||
*
|
||||
* This is needed so that each rule has access to the same source
|
||||
* text, token set, URLs, interwiki maps, page names, etc.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
|
||||
var $wiki = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor for this render format or rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Render(&$obj)
|
||||
{
|
||||
// keep a reference to the calling Text_Wiki object
|
||||
$this->wiki =& $obj;
|
||||
|
||||
// get the config-key-name for this object,
|
||||
// strip the Text_Wiki_Render_ part
|
||||
// 01234567890123456
|
||||
$tmp = get_class($this);
|
||||
$tmp = substr($tmp, 17);
|
||||
|
||||
// split into pieces at the _ mark.
|
||||
// first part is format, second part is rule.
|
||||
$part = explode('_', $tmp);
|
||||
$this->format = isset($part[0]) ? ucwords(strtolower($part[0])) : null;
|
||||
$this->rule = isset($part[1]) ? ucwords(strtolower($part[1])) : null;
|
||||
|
||||
// is there a format but no rule?
|
||||
// then this is the "main" render object, with
|
||||
// pre() and post() methods.
|
||||
if ($this->format && ! $this->rule &&
|
||||
isset($this->wiki->formatConf[$this->format]) &&
|
||||
is_array($this->wiki->formatConf[$this->format])) {
|
||||
|
||||
// this is a format render object
|
||||
$this->conf = array_merge(
|
||||
$this->conf,
|
||||
$this->wiki->formatConf[$this->format]
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
// is there a format and a rule?
|
||||
if ($this->format && $this->rule &&
|
||||
isset($this->wiki->renderConf[$this->format][$this->rule]) &&
|
||||
is_array($this->wiki->renderConf[$this->format][$this->rule])) {
|
||||
|
||||
// this is a rule render object
|
||||
$this->conf = array_merge(
|
||||
$this->conf,
|
||||
$this->wiki->renderConf[$this->format][$this->rule]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple method to safely get configuration key values.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $key The configuration key.
|
||||
*
|
||||
* @param mixed $default If the key does not exist, return this value
|
||||
* instead.
|
||||
*
|
||||
* @return mixed The configuration key value (if it exists) or the
|
||||
* default value (if not).
|
||||
*
|
||||
*/
|
||||
|
||||
function getConf($key, $default = null)
|
||||
{
|
||||
if (isset($this->conf[$key])) {
|
||||
return $this->conf[$key];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple method to wrap a configuration in an sprintf() format.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $key The configuration key.
|
||||
*
|
||||
* @param string $format The sprintf() format string.
|
||||
*
|
||||
* @return mixed The formatted configuration key value (if it exists)
|
||||
* or null (if it does not).
|
||||
*
|
||||
*/
|
||||
|
||||
function formatConf($format, $key)
|
||||
{
|
||||
if (isset($this->conf[$key])) {
|
||||
//$this->conf[$key] needs a textEncode....at least for Xhtml output...
|
||||
return sprintf($format, $this->conf[$key]);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default method to render url
|
||||
*
|
||||
* @access public
|
||||
* @param string $urlChunk a part of an url to render
|
||||
* @return rendered url
|
||||
*
|
||||
*/
|
||||
|
||||
function urlEncode($urlChunk)
|
||||
{
|
||||
return rawurlencode($urlChunk);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default method to render text (htmlspecialchars)
|
||||
*
|
||||
* @access public
|
||||
* @param string $text the text to render
|
||||
* @return rendered text
|
||||
*
|
||||
*/
|
||||
|
||||
function textEncode($text)
|
||||
{
|
||||
return htmlspecialchars($text);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
// vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
|
||||
/**
|
||||
* Base rendering class for parsed and tokenized text.
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version CVS: $Id: Render.inc.php 182 2008-09-14 15:56:00Z i.feelinglucky $
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
|
||||
/**
|
||||
* Base rendering class for parsed and tokenized text.
|
||||
*
|
||||
* @category Text
|
||||
* @package Text_Wiki
|
||||
* @author Paul M. Jones <pmjones@php.net>
|
||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
||||
* @version Release: @package_version@
|
||||
* @link http://pear.php.net/package/Text_Wiki
|
||||
*/
|
||||
class Text_Wiki_Render {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration options for this render rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $conf = array();
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of this rule's format.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $format = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of this rule's token array elements.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
|
||||
var $rule = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* A reference to the calling Text_Wiki object.
|
||||
*
|
||||
* This is needed so that each rule has access to the same source
|
||||
* text, token set, URLs, interwiki maps, page names, etc.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
|
||||
var $wiki = null;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Constructor for this render format or rule.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param object &$obj The calling "parent" Text_Wiki object.
|
||||
*
|
||||
*/
|
||||
|
||||
function Text_Wiki_Render(&$obj)
|
||||
{
|
||||
// keep a reference to the calling Text_Wiki object
|
||||
$this->wiki =& $obj;
|
||||
|
||||
// get the config-key-name for this object,
|
||||
// strip the Text_Wiki_Render_ part
|
||||
// 01234567890123456
|
||||
$tmp = get_class($this);
|
||||
$tmp = substr($tmp, 17);
|
||||
|
||||
// split into pieces at the _ mark.
|
||||
// first part is format, second part is rule.
|
||||
$part = explode('_', $tmp);
|
||||
$this->format = isset($part[0]) ? ucwords(strtolower($part[0])) : null;
|
||||
$this->rule = isset($part[1]) ? ucwords(strtolower($part[1])) : null;
|
||||
|
||||
// is there a format but no rule?
|
||||
// then this is the "main" render object, with
|
||||
// pre() and post() methods.
|
||||
if ($this->format && ! $this->rule &&
|
||||
isset($this->wiki->formatConf[$this->format]) &&
|
||||
is_array($this->wiki->formatConf[$this->format])) {
|
||||
|
||||
// this is a format render object
|
||||
$this->conf = array_merge(
|
||||
$this->conf,
|
||||
$this->wiki->formatConf[$this->format]
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
// is there a format and a rule?
|
||||
if ($this->format && $this->rule &&
|
||||
isset($this->wiki->renderConf[$this->format][$this->rule]) &&
|
||||
is_array($this->wiki->renderConf[$this->format][$this->rule])) {
|
||||
|
||||
// this is a rule render object
|
||||
$this->conf = array_merge(
|
||||
$this->conf,
|
||||
$this->wiki->renderConf[$this->format][$this->rule]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple method to safely get configuration key values.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $key The configuration key.
|
||||
*
|
||||
* @param mixed $default If the key does not exist, return this value
|
||||
* instead.
|
||||
*
|
||||
* @return mixed The configuration key value (if it exists) or the
|
||||
* default value (if not).
|
||||
*
|
||||
*/
|
||||
|
||||
function getConf($key, $default = null)
|
||||
{
|
||||
if (isset($this->conf[$key])) {
|
||||
return $this->conf[$key];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Simple method to wrap a configuration in an sprintf() format.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @param string $key The configuration key.
|
||||
*
|
||||
* @param string $format The sprintf() format string.
|
||||
*
|
||||
* @return mixed The formatted configuration key value (if it exists)
|
||||
* or null (if it does not).
|
||||
*
|
||||
*/
|
||||
|
||||
function formatConf($format, $key)
|
||||
{
|
||||
if (isset($this->conf[$key])) {
|
||||
//$this->conf[$key] needs a textEncode....at least for Xhtml output...
|
||||
return sprintf($format, $this->conf[$key]);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default method to render url
|
||||
*
|
||||
* @access public
|
||||
* @param string $urlChunk a part of an url to render
|
||||
* @return rendered url
|
||||
*
|
||||
*/
|
||||
|
||||
function urlEncode($urlChunk)
|
||||
{
|
||||
return rawurlencode($urlChunk);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default method to render text (htmlspecialchars)
|
||||
*
|
||||
* @access public
|
||||
* @param string $text the text to render
|
||||
* @return rendered text
|
||||
*
|
||||
*/
|
||||
|
||||
function textEncode($text)
|
||||
{
|
||||
return htmlspecialchars($text);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,185 +1,185 @@
|
||||
<?php
|
||||
/**
|
||||
* 将文章同时发布到您的Qzone
|
||||
*
|
||||
* @package PostToQzone
|
||||
* @version 1.0 beta
|
||||
* @author blankyao
|
||||
* @link http://www.blankyao.cn
|
||||
*/
|
||||
include "phpmailer.php";
|
||||
include "smtp.php";
|
||||
class PostToQzone_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* activate
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function activate()
|
||||
{
|
||||
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->insert =
|
||||
array('PostToQzone_Plugin', 'publish');
|
||||
if(!extension_loaded("sockets")){
|
||||
throw new Typecho_Plugin_Exception(_t('对不起, 您的主机不支持socket扩展, 无法正常使用此功能'));
|
||||
}
|
||||
return _t('请配置您的qq号码以及密码,以便发布文章到Qzone');
|
||||
}
|
||||
|
||||
/**
|
||||
* deactivate
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function deactivate()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件配置面板
|
||||
*
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{
|
||||
$qq = new Typecho_Widget_Helper_Form_Element_Text('qq', NULL, NULL,
|
||||
_t('qq号码'), _t('请填写您的qq号码'));
|
||||
$qq->addRule('isInteger', _t('qq号码必须是纯数字'));
|
||||
$form->addInput($qq->addRule('required', _t('必须填写一个qq号码')));
|
||||
$psw = new Typecho_Widget_Helper_Form_Element_Password('psw', NULL, NULL,
|
||||
_t('qq邮箱密码'), _t('请填写您的qq邮箱密码'));
|
||||
$form->addInput($psw->addRule('required', _t('必须填写一个qq邮箱密码')));
|
||||
$title = new Typecho_Widget_Helper_Form_Element_Text('title', NULL, '{post_title}',
|
||||
_t('标题模板'), _t('请填写您的标题模板'));
|
||||
$form->addInput($title->addRule('required', _t('必须填写一个标题模板')));
|
||||
$content = new Typecho_Widget_Helper_Form_Element_Textarea('content', NULL, '{post_content}',
|
||||
_t('内容模板'), _t('请填写您的内容模板'));
|
||||
$form->addInput($content->addRule('required', _t('必须填写一个内容模板')));
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
/**
|
||||
* 发送文章到qzone
|
||||
*
|
||||
* @param mixed $contents 文章结构体
|
||||
* @access public
|
||||
* @return mixed $contents 处理后的文章结构体
|
||||
*/
|
||||
public function publish($contents)
|
||||
{
|
||||
//todo:增加一个选项,如果选择发送的qzone的话再发到qzone
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$config = $options->plugin('PostToQzone');
|
||||
$config = postToQzoneDefault($config);
|
||||
|
||||
if($config->qq > 1000 && !empty($contents['title']) && !empty($contents['text'])){
|
||||
|
||||
$post_content = str_replace('{post_content}', $contents['text'], $config->content);
|
||||
$post_content = str_replace('{post_title}', $contents['title'], $post_content);
|
||||
|
||||
$post_title = str_replace('{post_title}', $contents['title'], $config->title);
|
||||
|
||||
$m=new Mailer($config->qq,$config->psw);
|
||||
$m->Halo($post_title,$post_content);
|
||||
}
|
||||
return $contents;
|
||||
}
|
||||
}
|
||||
|
||||
function postToQzoneDefault($config){
|
||||
if(strpos($config->title,'{post_title}') === false){
|
||||
$config->title = '{post_title}';
|
||||
}
|
||||
|
||||
if(strpos($config->content,'{post_content}') === false){
|
||||
$config->content = '{post_content}';
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
|
||||
class Mailer extends PHPMailer
|
||||
{
|
||||
var $qq=null;
|
||||
function Mailer($qq,$psw) {
|
||||
$this->qq=$qq;
|
||||
$this->From = "{$qq}@qq.com";
|
||||
$this->FromName = $qq;
|
||||
$this->Host = "smtp.qq.com";
|
||||
$this->Mailer = "smtp";
|
||||
$this->WordWrap = 75;
|
||||
$this->CharSet = Typecho_Widget::widget('Widget_Options')->charset;
|
||||
$this->Encoding = 'base64';
|
||||
$this->SMTPAuth = true;
|
||||
$this->IsHTML(true);
|
||||
$this->Username = $qq;
|
||||
$this->Password = $psw;
|
||||
}
|
||||
|
||||
function Halo($subject,$body){
|
||||
$this->AddAddress("{$this->qq}@qzone.qq.com", "{$this->qq}@qzone.qq.com");
|
||||
$this->Subject = $subject;
|
||||
$this->Body = $body;
|
||||
return $this->Send();
|
||||
}
|
||||
}
|
||||
|
||||
class Crypter
|
||||
{
|
||||
var $key;
|
||||
|
||||
function Crypter($clave){
|
||||
$this->key = $clave;
|
||||
}
|
||||
|
||||
function keyED($txt) {
|
||||
$encrypt_key = md5($this->key);
|
||||
$ctr=0;
|
||||
$tmp = "";
|
||||
for ($i=0;$i<strlen($txt);$i++) {
|
||||
if ($ctr==strlen($encrypt_key)) $ctr=0;
|
||||
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
|
||||
$ctr++;
|
||||
}
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
function encrypt($txt){
|
||||
srand((double)microtime()*1000000);
|
||||
$encrypt_key = md5(rand(0,32000));
|
||||
$ctr=0;
|
||||
$tmp = "";
|
||||
for ($i=0;$i<strlen($txt);$i++){
|
||||
if ($ctr==strlen($encrypt_key)) $ctr=0;
|
||||
$tmp.= substr($encrypt_key,$ctr,1) .
|
||||
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
|
||||
$ctr++;
|
||||
}
|
||||
return base64_encode($this->keyED($tmp));
|
||||
}
|
||||
|
||||
function decrypt($txt) {
|
||||
$txt = $this->keyED(base64_decode($txt));
|
||||
$tmp = "";
|
||||
for ($i=0;$i<strlen($txt);$i++){
|
||||
$md5 = substr($txt,$i,1);
|
||||
$i++;
|
||||
$tmp.= (substr($txt,$i,1) ^ $md5);
|
||||
}
|
||||
return $tmp;
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* 将文章同时发布到您的Qzone
|
||||
*
|
||||
* @package PostToQzone
|
||||
* @version 1.0 beta
|
||||
* @author blankyao
|
||||
* @link http://www.blankyao.cn
|
||||
*/
|
||||
include "phpmailer.php";
|
||||
include "smtp.php";
|
||||
class PostToQzone_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* activate
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function activate()
|
||||
{
|
||||
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->insert =
|
||||
array('PostToQzone_Plugin', 'publish');
|
||||
if(!extension_loaded("sockets")){
|
||||
throw new Typecho_Plugin_Exception(_t('对不起, 您的主机不支持socket扩展, 无法正常使用此功能'));
|
||||
}
|
||||
return _t('请配置您的qq号码以及密码,以便发布文章到Qzone');
|
||||
}
|
||||
|
||||
/**
|
||||
* deactivate
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function deactivate()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件配置面板
|
||||
*
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{
|
||||
$qq = new Typecho_Widget_Helper_Form_Element_Text('qq', NULL, NULL,
|
||||
_t('qq号码'), _t('请填写您的qq号码'));
|
||||
$qq->addRule('isInteger', _t('qq号码必须是纯数字'));
|
||||
$form->addInput($qq->addRule('required', _t('必须填写一个qq号码')));
|
||||
$psw = new Typecho_Widget_Helper_Form_Element_Password('psw', NULL, NULL,
|
||||
_t('qq邮箱密码'), _t('请填写您的qq邮箱密码'));
|
||||
$form->addInput($psw->addRule('required', _t('必须填写一个qq邮箱密码')));
|
||||
$title = new Typecho_Widget_Helper_Form_Element_Text('title', NULL, '{post_title}',
|
||||
_t('标题模板'), _t('请填写您的标题模板'));
|
||||
$form->addInput($title->addRule('required', _t('必须填写一个标题模板')));
|
||||
$content = new Typecho_Widget_Helper_Form_Element_Textarea('content', NULL, '{post_content}',
|
||||
_t('内容模板'), _t('请填写您的内容模板'));
|
||||
$form->addInput($content->addRule('required', _t('必须填写一个内容模板')));
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
/**
|
||||
* 发送文章到qzone
|
||||
*
|
||||
* @param mixed $contents 文章结构体
|
||||
* @access public
|
||||
* @return mixed $contents 处理后的文章结构体
|
||||
*/
|
||||
public function publish($contents)
|
||||
{
|
||||
//todo:增加一个选项,如果选择发送的qzone的话再发到qzone
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$config = $options->plugin('PostToQzone');
|
||||
$config = postToQzoneDefault($config);
|
||||
|
||||
if($config->qq > 1000 && !empty($contents['title']) && !empty($contents['text'])){
|
||||
|
||||
$post_content = str_replace('{post_content}', $contents['text'], $config->content);
|
||||
$post_content = str_replace('{post_title}', $contents['title'], $post_content);
|
||||
|
||||
$post_title = str_replace('{post_title}', $contents['title'], $config->title);
|
||||
|
||||
$m=new Mailer($config->qq,$config->psw);
|
||||
$m->Halo($post_title,$post_content);
|
||||
}
|
||||
return $contents;
|
||||
}
|
||||
}
|
||||
|
||||
function postToQzoneDefault($config){
|
||||
if(strpos($config->title,'{post_title}') === false){
|
||||
$config->title = '{post_title}';
|
||||
}
|
||||
|
||||
if(strpos($config->content,'{post_content}') === false){
|
||||
$config->content = '{post_content}';
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
|
||||
class Mailer extends PHPMailer
|
||||
{
|
||||
var $qq=null;
|
||||
function Mailer($qq,$psw) {
|
||||
$this->qq=$qq;
|
||||
$this->From = "{$qq}@qq.com";
|
||||
$this->FromName = $qq;
|
||||
$this->Host = "smtp.qq.com";
|
||||
$this->Mailer = "smtp";
|
||||
$this->WordWrap = 75;
|
||||
$this->CharSet = Typecho_Widget::widget('Widget_Options')->charset;
|
||||
$this->Encoding = 'base64';
|
||||
$this->SMTPAuth = true;
|
||||
$this->IsHTML(true);
|
||||
$this->Username = $qq;
|
||||
$this->Password = $psw;
|
||||
}
|
||||
|
||||
function Halo($subject,$body){
|
||||
$this->AddAddress("{$this->qq}@qzone.qq.com", "{$this->qq}@qzone.qq.com");
|
||||
$this->Subject = $subject;
|
||||
$this->Body = $body;
|
||||
return $this->Send();
|
||||
}
|
||||
}
|
||||
|
||||
class Crypter
|
||||
{
|
||||
var $key;
|
||||
|
||||
function Crypter($clave){
|
||||
$this->key = $clave;
|
||||
}
|
||||
|
||||
function keyED($txt) {
|
||||
$encrypt_key = md5($this->key);
|
||||
$ctr=0;
|
||||
$tmp = "";
|
||||
for ($i=0;$i<strlen($txt);$i++) {
|
||||
if ($ctr==strlen($encrypt_key)) $ctr=0;
|
||||
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
|
||||
$ctr++;
|
||||
}
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
function encrypt($txt){
|
||||
srand((double)microtime()*1000000);
|
||||
$encrypt_key = md5(rand(0,32000));
|
||||
$ctr=0;
|
||||
$tmp = "";
|
||||
for ($i=0;$i<strlen($txt);$i++){
|
||||
if ($ctr==strlen($encrypt_key)) $ctr=0;
|
||||
$tmp.= substr($encrypt_key,$ctr,1) .
|
||||
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
|
||||
$ctr++;
|
||||
}
|
||||
return base64_encode($this->keyED($tmp));
|
||||
}
|
||||
|
||||
function decrypt($txt) {
|
||||
$txt = $this->keyED(base64_decode($txt));
|
||||
$tmp = "";
|
||||
for ($i=0;$i<strlen($txt);$i++){
|
||||
$md5 = substr($txt,$i,1);
|
||||
$i++;
|
||||
$tmp.= (substr($txt,$i,1) ^ $md5);
|
||||
}
|
||||
return $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,78 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* 直接在在文章中插入[embed_snipt:{code_id}]({code_id}为snipt上面的id)就可引用http://snipt.org/上分享的代码
|
||||
*
|
||||
* @package ShareCode
|
||||
* @author blankyao
|
||||
* @version 1.0.0
|
||||
* @link http://www.blankyao.cn
|
||||
*/
|
||||
|
||||
class ShareCode_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* 激活插件方法,如果激活失败,直接抛出异常
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function activate()
|
||||
{
|
||||
/** 前端输出处理接口 */
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->content = array('ShareCode_Plugin', 'parse');
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerpt = array('ShareCode_Plugin', 'parse');
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用插件方法,如果禁用失败,直接抛出异常
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function deactivate(){}
|
||||
|
||||
/**
|
||||
* 获取插件配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form 配置面板
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
/**
|
||||
* 解析内容
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function parse($value, $lastResult)
|
||||
{
|
||||
$value = empty($lastResult) ? $value : $lastResult;
|
||||
$regex = '/\[embed_snipt:(.*?)]/i';
|
||||
preg_match_all( $regex, $value, $matches);
|
||||
|
||||
$count = count($matches[0]);
|
||||
for($i = 0;$i < $count;$i++) {
|
||||
$url = $matches[1][$i];
|
||||
$url = '<script type="text/javascript" src="http://embed.snipt.org/'. $url .'"></script>';
|
||||
|
||||
$value = str_replace($matches[0][$i], $url, $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* 直接在在文章中插入[embed_snipt:{code_id}]({code_id}为snipt上面的id)就可引用http://snipt.org/上分享的代码
|
||||
*
|
||||
* @package ShareCode
|
||||
* @author blankyao
|
||||
* @version 1.0.0
|
||||
* @link http://www.blankyao.cn
|
||||
*/
|
||||
|
||||
class ShareCode_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
/**
|
||||
* 激活插件方法,如果激活失败,直接抛出异常
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function activate()
|
||||
{
|
||||
/** 前端输出处理接口 */
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->content = array('ShareCode_Plugin', 'parse');
|
||||
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerpt = array('ShareCode_Plugin', 'parse');
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用插件方法,如果禁用失败,直接抛出异常
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
* @throws Typecho_Plugin_Exception
|
||||
*/
|
||||
public static function deactivate(){}
|
||||
|
||||
/**
|
||||
* 获取插件配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form 配置面板
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
/**
|
||||
* 个人用户的配置面板
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
|
||||
|
||||
/**
|
||||
* 解析内容
|
||||
*
|
||||
* @access public
|
||||
* @param Typecho_Widget_Helper_Form $form
|
||||
* @return void
|
||||
*/
|
||||
public static function parse($value, $lastResult)
|
||||
{
|
||||
$value = empty($lastResult) ? $value : $lastResult;
|
||||
$regex = '/\[embed_snipt:(.*?)]/i';
|
||||
preg_match_all( $regex, $value, $matches);
|
||||
|
||||
$count = count($matches[0]);
|
||||
for($i = 0;$i < $count;$i++) {
|
||||
$url = $matches[1][$i];
|
||||
$url = '<script type="text/javascript" src="http://embed.snipt.org/'. $url .'"></script>';
|
||||
|
||||
$value = str_replace($matches[0][$i], $url, $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
@@ -1,79 +1,79 @@
|
||||
/**
|
||||
* $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
tinymce.create('tinymce.plugins.CoderPlugin', {
|
||||
init : function(ed, url) {
|
||||
|
||||
ed.onClick.add(function(ed, e) {
|
||||
e = e.target;
|
||||
|
||||
if (e.nodeName === 'CODE' || e.nodeName === 'PRE' || e.className.indexOf("typecho-plugin") >= 0)
|
||||
ed.selection.select(e);
|
||||
});
|
||||
|
||||
|
||||
ed.onBeforeSetContent.add(function(ed, o) {
|
||||
|
||||
var _replace = function (g, a, b, c) {
|
||||
|
||||
c = c.trim().replace(/( |<|>|\r\n|\r|\n)/g, function (e) {
|
||||
|
||||
switch (e) {
|
||||
|
||||
case "<":
|
||||
return "<";
|
||||
|
||||
case ">":
|
||||
return ">";
|
||||
|
||||
case "\r\n":
|
||||
case "\r":
|
||||
case "\n":
|
||||
return '<br />';
|
||||
|
||||
case " ":
|
||||
return ' ';
|
||||
|
||||
default:
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return '<' + a + b + '>' + c + '</' + a + '>';
|
||||
};
|
||||
|
||||
o.content = o.content.replace(/<(code)([^>]*)>([\s\S]*?)<\/(code)>/ig, _replace);
|
||||
o.content = o.content.replace(/<(pre)([^>]*)>([\s\S]*?)<\/(pre)>/ig, _replace);
|
||||
});
|
||||
|
||||
/*
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (o.get) {
|
||||
o.content = o.content.replace(/<textarea([^>]*)>/ig, '<code$1>');
|
||||
o.content = o.content.replace(/<\/textarea>/ig, '</code>');
|
||||
}
|
||||
});
|
||||
*/
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
return {
|
||||
longname : 'Coder',
|
||||
author : 'Typecho Team',
|
||||
authorurl : 'http://typecho.org',
|
||||
infourl : 'http://typecho.org',
|
||||
version : tinymce.majorVersion + "." + tinymce.minorVersion
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// Register plugin
|
||||
tinymce.PluginManager.add('coder', tinymce.plugins.CoderPlugin);
|
||||
})();
|
||||
/**
|
||||
* $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
tinymce.create('tinymce.plugins.CoderPlugin', {
|
||||
init : function(ed, url) {
|
||||
|
||||
ed.onClick.add(function(ed, e) {
|
||||
e = e.target;
|
||||
|
||||
if (e.nodeName === 'CODE' || e.nodeName === 'PRE' || e.className.indexOf("typecho-plugin") >= 0)
|
||||
ed.selection.select(e);
|
||||
});
|
||||
|
||||
|
||||
ed.onBeforeSetContent.add(function(ed, o) {
|
||||
|
||||
var _replace = function (g, a, b, c) {
|
||||
|
||||
c = c.trim().replace(/( |<|>|\r\n|\r|\n)/g, function (e) {
|
||||
|
||||
switch (e) {
|
||||
|
||||
case "<":
|
||||
return "<";
|
||||
|
||||
case ">":
|
||||
return ">";
|
||||
|
||||
case "\r\n":
|
||||
case "\r":
|
||||
case "\n":
|
||||
return '<br />';
|
||||
|
||||
case " ":
|
||||
return ' ';
|
||||
|
||||
default:
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return '<' + a + b + '>' + c + '</' + a + '>';
|
||||
};
|
||||
|
||||
o.content = o.content.replace(/<(code)([^>]*)>([\s\S]*?)<\/(code)>/ig, _replace);
|
||||
o.content = o.content.replace(/<(pre)([^>]*)>([\s\S]*?)<\/(pre)>/ig, _replace);
|
||||
});
|
||||
|
||||
/*
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (o.get) {
|
||||
o.content = o.content.replace(/<textarea([^>]*)>/ig, '<code$1>');
|
||||
o.content = o.content.replace(/<\/textarea>/ig, '</code>');
|
||||
}
|
||||
});
|
||||
*/
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
return {
|
||||
longname : 'Coder',
|
||||
author : 'Typecho Team',
|
||||
authorurl : 'http://typecho.org',
|
||||
infourl : 'http://typecho.org',
|
||||
version : tinymce.majorVersion + "." + tinymce.minorVersion
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// Register plugin
|
||||
tinymce.PluginManager.add('coder', tinymce.plugins.CoderPlugin);
|
||||
})();
|
||||
|
||||
@@ -1,387 +1,387 @@
|
||||
<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Template for dialogs</title>
|
||||
<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="mceEditor">
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px;">
|
||||
<div class="mceWrapper">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Blured</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px;">
|
||||
<div class="mceWrapper mceMovable mceFocus">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Focused</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceStatusbar">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar, Resizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Resizable, Maximizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">
|
||||
<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Blurred, Maximizable, Statusbar, Resizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Maximized, Maximizable, Minimizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">
|
||||
<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Blured</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceModal mceAlert">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Alert</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
</span>
|
||||
<div class="mceRight"></div>
|
||||
<div class="mceIcon"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceButton mceOk" href="#">Ok</a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Confirm</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
</span>
|
||||
<div class="mceRight"></div>
|
||||
<div class="mceIcon"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceButton mceOk" href="#">Ok</a>
|
||||
<a class="mceButton mceCancel" href="#">Cancel</a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Template for dialogs</title>
|
||||
<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="mceEditor">
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px;">
|
||||
<div class="mceWrapper">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Blured</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px;">
|
||||
<div class="mceWrapper mceMovable mceFocus">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Focused</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceStatusbar">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar, Resizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Resizable, Maximizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">
|
||||
<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Blurred, Maximizable, Statusbar, Resizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Maximized, Maximizable, Minimizable</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">
|
||||
<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Blured</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>Content</span>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Statusbar text.</span>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceMin" href="#"></a>
|
||||
<a class="mceMax" href="#"></a>
|
||||
<a class="mceMed" href="#"></a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
<a class="mceResize mceResizeN" href="#"></a>
|
||||
<a class="mceResize mceResizeS" href="#"></a>
|
||||
<a class="mceResize mceResizeW" href="#"></a>
|
||||
<a class="mceResize mceResizeE" href="#"></a>
|
||||
<a class="mceResize mceResizeNW" href="#"></a>
|
||||
<a class="mceResize mceResizeNE" href="#"></a>
|
||||
<a class="mceResize mceResizeSW" href="#"></a>
|
||||
<a class="mceResize mceResizeSE" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceModal mceAlert">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Alert</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
</span>
|
||||
<div class="mceRight"></div>
|
||||
<div class="mceIcon"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceButton mceOk" href="#">Ok</a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">
|
||||
<div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">
|
||||
<div class="mceTop">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
<span>Confirm</span>
|
||||
</div>
|
||||
|
||||
<div class="mceMiddle">
|
||||
<div class="mceLeft"></div>
|
||||
<span>
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
This is a very long error message. This is a very long error message.
|
||||
</span>
|
||||
<div class="mceRight"></div>
|
||||
<div class="mceIcon"></div>
|
||||
</div>
|
||||
|
||||
<div class="mceBottom">
|
||||
<div class="mceLeft"></div>
|
||||
<div class="mceCenter"></div>
|
||||
<div class="mceRight"></div>
|
||||
</div>
|
||||
|
||||
<a class="mceMove" href="#"></a>
|
||||
<a class="mceButton mceOk" href="#">Ok</a>
|
||||
<a class="mceButton mceCancel" href="#">Cancel</a>
|
||||
<a class="mceClose" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}
|
||||
.mceItemShockWave {background-image: url(../img/shockwave.gif);}
|
||||
.mceItemFlash {background-image:url(../img/flash.gif);}
|
||||
.mceItemQuickTime {background-image:url(../img/quicktime.gif);}
|
||||
.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}
|
||||
.mceItemRealMedia {background-image:url(../img/realmedia.gif);}
|
||||
.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}
|
||||
.mceItemShockWave {background-image: url(../img/shockwave.gif);}
|
||||
.mceItemFlash {background-image:url(../img/flash.gif);}
|
||||
.mceItemQuickTime {background-image:url(../img/quicktime.gif);}
|
||||
.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}
|
||||
.mceItemRealMedia {background-image:url(../img/realmedia.gif);}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }
|
||||
#hspace, #vspace { width: 50px }
|
||||
#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }
|
||||
#flash_base, #flash_flashvars { width: 240px }
|
||||
#width, #height { width: 40px }
|
||||
#src, #media_type { width: 250px }
|
||||
#class { width: 120px }
|
||||
#prev { margin: 0; border: 1px solid black; width: 360px; height: 230px; overflow: auto }
|
||||
.panel_wrapper div.current { height: 420px; overflow: auto }
|
||||
#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }
|
||||
.mceAddSelectValue { background-color: #DDDDDD }
|
||||
#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px }
|
||||
#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }
|
||||
#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }
|
||||
#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }
|
||||
#qt_qtsrc { width: 200px }
|
||||
#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }
|
||||
#hspace, #vspace { width: 50px }
|
||||
#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }
|
||||
#flash_base, #flash_flashvars { width: 240px }
|
||||
#width, #height { width: 40px }
|
||||
#src, #media_type { width: 250px }
|
||||
#class { width: 120px }
|
||||
#prev { margin: 0; border: 1px solid black; width: 360px; height: 230px; overflow: auto }
|
||||
.panel_wrapper div.current { height: 420px; overflow: auto }
|
||||
#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }
|
||||
.mceAddSelectValue { background-color: #DDDDDD }
|
||||
#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px }
|
||||
#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }
|
||||
#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }
|
||||
#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }
|
||||
#qt_qtsrc { width: 200px }
|
||||
|
||||
@@ -1,73 +1,73 @@
|
||||
/**
|
||||
* This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
|
||||
*/
|
||||
|
||||
function writeFlash(p) {
|
||||
writeEmbed(
|
||||
'D27CDB6E-AE6D-11cf-96B8-444553540000',
|
||||
'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
|
||||
'application/x-shockwave-flash',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeShockWave(p) {
|
||||
writeEmbed(
|
||||
'166B1BCA-3F9C-11CF-8075-444553540000',
|
||||
'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
|
||||
'application/x-director',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeQuickTime(p) {
|
||||
writeEmbed(
|
||||
'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
|
||||
'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
|
||||
'video/quicktime',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeRealMedia(p) {
|
||||
writeEmbed(
|
||||
'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
|
||||
'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
|
||||
'audio/x-pn-realaudio-plugin',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeWindowsMedia(p) {
|
||||
p.url = p.src;
|
||||
writeEmbed(
|
||||
'6BF52A52-394A-11D3-B153-00C04F79FAA6',
|
||||
'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
|
||||
'application/x-mplayer2',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeEmbed(cls, cb, mt, p) {
|
||||
var h = '', n;
|
||||
|
||||
h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
|
||||
h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
|
||||
h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
|
||||
h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
|
||||
h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
|
||||
h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
|
||||
h += '>';
|
||||
|
||||
for (n in p)
|
||||
h += '<param name="' + n + '" value="' + p[n] + '">';
|
||||
|
||||
h += '<embed type="' + mt + '"';
|
||||
|
||||
for (n in p)
|
||||
h += n + '="' + p[n] + '" ';
|
||||
|
||||
h += '></embed></object>';
|
||||
|
||||
document.write(h);
|
||||
}
|
||||
/**
|
||||
* This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
|
||||
*/
|
||||
|
||||
function writeFlash(p) {
|
||||
writeEmbed(
|
||||
'D27CDB6E-AE6D-11cf-96B8-444553540000',
|
||||
'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
|
||||
'application/x-shockwave-flash',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeShockWave(p) {
|
||||
writeEmbed(
|
||||
'166B1BCA-3F9C-11CF-8075-444553540000',
|
||||
'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
|
||||
'application/x-director',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeQuickTime(p) {
|
||||
writeEmbed(
|
||||
'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
|
||||
'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
|
||||
'video/quicktime',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeRealMedia(p) {
|
||||
writeEmbed(
|
||||
'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
|
||||
'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
|
||||
'audio/x-pn-realaudio-plugin',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeWindowsMedia(p) {
|
||||
p.url = p.src;
|
||||
writeEmbed(
|
||||
'6BF52A52-394A-11D3-B153-00C04F79FAA6',
|
||||
'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
|
||||
'application/x-mplayer2',
|
||||
p
|
||||
);
|
||||
}
|
||||
|
||||
function writeEmbed(cls, cb, mt, p) {
|
||||
var h = '', n;
|
||||
|
||||
h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
|
||||
h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
|
||||
h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
|
||||
h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
|
||||
h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
|
||||
h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
|
||||
h += '>';
|
||||
|
||||
for (n in p)
|
||||
h += '<param name="' + n + '" value="' + p[n] + '">';
|
||||
|
||||
h += '<embed type="' + mt + '"';
|
||||
|
||||
for (n in p)
|
||||
h += n + '="' + p[n] + '" ';
|
||||
|
||||
h += '></embed></object>';
|
||||
|
||||
document.write(h);
|
||||
}
|
||||
|
||||
1260
usr/plugins/TinyMCE/tiny_mce/plugins/media/js/media.js
vendored
1260
usr/plugins/TinyMCE/tiny_mce/plugins/media/js/media.js
vendored
File diff suppressed because it is too large
Load Diff
1644
usr/plugins/TinyMCE/tiny_mce/plugins/media/media.htm
vendored
1644
usr/plugins/TinyMCE/tiny_mce/plugins/media/media.htm
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,74 +1,74 @@
|
||||
/**
|
||||
* $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
tinymce.create('tinymce.plugins.MoreBreakPlugin', {
|
||||
init : function(ed, url) {
|
||||
var pb = '<img src="' + url + '/img/trans.gif" class="mceMoreBreak mceItemNoResize" />', cls = 'mceMoreBreak', sep = ed.getParam('morebreak_separator', '<!--more-->'), pbRE;
|
||||
|
||||
pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');
|
||||
|
||||
// Register commands
|
||||
ed.addCommand('mceMoreBreak', function() {
|
||||
ed.execCommand('mceInsertContent', 0, pb);
|
||||
});
|
||||
|
||||
// Register buttons
|
||||
ed.addButton('morebreak', {title : 'morebreak.desc', cmd : cls});
|
||||
|
||||
ed.onInit.add(function() {
|
||||
if (ed.settings.content_css !== false)
|
||||
ed.dom.loadCSS(url + "/css/content.css");
|
||||
|
||||
if (ed.theme.onResolveName) {
|
||||
ed.theme.onResolveName.add(function(th, o) {
|
||||
if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))
|
||||
o.name = 'morebreak';
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ed.onClick.add(function(ed, e) {
|
||||
e = e.target;
|
||||
|
||||
if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))
|
||||
ed.selection.select(e);
|
||||
});
|
||||
|
||||
ed.onNodeChange.add(function(ed, cm, n) {
|
||||
cm.setActive('morebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));
|
||||
});
|
||||
|
||||
ed.onBeforeSetContent.add(function(ed, o) {
|
||||
o.content = o.content.replace(pbRE, pb);
|
||||
});
|
||||
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (o.get)
|
||||
o.content = o.content.replace(/<img[^>]+>/g, function(im) {
|
||||
if (im.indexOf('class="mceMoreBreak') !== -1)
|
||||
im = sep;
|
||||
|
||||
return im;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
return {
|
||||
longname : 'MoreBreak',
|
||||
author : 'Moxiecode Systems AB',
|
||||
authorurl : 'http://tinymce.moxiecode.com',
|
||||
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/morebreak',
|
||||
version : tinymce.majorVersion + "." + tinymce.minorVersion
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// Register plugin
|
||||
tinymce.PluginManager.add('morebreak', tinymce.plugins.MoreBreakPlugin);
|
||||
})();
|
||||
/**
|
||||
* $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
tinymce.create('tinymce.plugins.MoreBreakPlugin', {
|
||||
init : function(ed, url) {
|
||||
var pb = '<img src="' + url + '/img/trans.gif" class="mceMoreBreak mceItemNoResize" />', cls = 'mceMoreBreak', sep = ed.getParam('morebreak_separator', '<!--more-->'), pbRE;
|
||||
|
||||
pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');
|
||||
|
||||
// Register commands
|
||||
ed.addCommand('mceMoreBreak', function() {
|
||||
ed.execCommand('mceInsertContent', 0, pb);
|
||||
});
|
||||
|
||||
// Register buttons
|
||||
ed.addButton('morebreak', {title : 'morebreak.desc', cmd : cls});
|
||||
|
||||
ed.onInit.add(function() {
|
||||
if (ed.settings.content_css !== false)
|
||||
ed.dom.loadCSS(url + "/css/content.css");
|
||||
|
||||
if (ed.theme.onResolveName) {
|
||||
ed.theme.onResolveName.add(function(th, o) {
|
||||
if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))
|
||||
o.name = 'morebreak';
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ed.onClick.add(function(ed, e) {
|
||||
e = e.target;
|
||||
|
||||
if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))
|
||||
ed.selection.select(e);
|
||||
});
|
||||
|
||||
ed.onNodeChange.add(function(ed, cm, n) {
|
||||
cm.setActive('morebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));
|
||||
});
|
||||
|
||||
ed.onBeforeSetContent.add(function(ed, o) {
|
||||
o.content = o.content.replace(pbRE, pb);
|
||||
});
|
||||
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (o.get)
|
||||
o.content = o.content.replace(/<img[^>]+>/g, function(im) {
|
||||
if (im.indexOf('class="mceMoreBreak') !== -1)
|
||||
im = sep;
|
||||
|
||||
return im;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
return {
|
||||
longname : 'MoreBreak',
|
||||
author : 'Moxiecode Systems AB',
|
||||
authorurl : 'http://tinymce.moxiecode.com',
|
||||
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/morebreak',
|
||||
version : tinymce.majorVersion + "." + tinymce.minorVersion
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// Register plugin
|
||||
tinymce.PluginManager.add('morebreak', tinymce.plugins.MoreBreakPlugin);
|
||||
})();
|
||||
|
||||
@@ -1,56 +1,56 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.about_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="js/about.js"></script>
|
||||
</head>
|
||||
<body id="about" style="display: none">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>
|
||||
<li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>
|
||||
<li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="general_panel" class="panel current">
|
||||
<h3>{#advanced_dlg.about_title}</h3>
|
||||
<p>Version: <span id="version"></span> (<span id="date"></span>)</p>
|
||||
<p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>
|
||||
by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
|
||||
<p>Copyright © 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
|
||||
<p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>
|
||||
|
||||
<div id="buttoncontainer">
|
||||
<a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
|
||||
<a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>
|
||||
<a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="plugins_panel" class="panel">
|
||||
<div id="pluginscontainer">
|
||||
<h3>{#advanced_dlg.about_loaded}</h3>
|
||||
|
||||
<div id="plugintablecontainer">
|
||||
</div>
|
||||
|
||||
<p> </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="help_panel" class="panel noscroll" style="overflow: visible;">
|
||||
<div id="iframecontainer"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.about_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="js/about.js"></script>
|
||||
</head>
|
||||
<body id="about" style="display: none">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>
|
||||
<li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>
|
||||
<li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="general_panel" class="panel current">
|
||||
<h3>{#advanced_dlg.about_title}</h3>
|
||||
<p>Version: <span id="version"></span> (<span id="date"></span>)</p>
|
||||
<p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>
|
||||
by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
|
||||
<p>Copyright © 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
|
||||
<p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>
|
||||
|
||||
<div id="buttoncontainer">
|
||||
<a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
|
||||
<a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>
|
||||
<a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="plugins_panel" class="panel">
|
||||
<div id="pluginscontainer">
|
||||
<h3>{#advanced_dlg.about_loaded}</h3>
|
||||
|
||||
<div id="plugintablecontainer">
|
||||
</div>
|
||||
|
||||
<p> </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="help_panel" class="panel noscroll" style="overflow: visible;">
|
||||
<div id="iframecontainer"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.anchor_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/anchor.js"></script>
|
||||
</head>
|
||||
<body style="display: none">
|
||||
<form onsubmit="AnchorDialog.update();return false;" action="#">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap">{#advanced_dlg.anchor_name}:</td>
|
||||
<td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#update}" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.anchor_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/anchor.js"></script>
|
||||
</head>
|
||||
<body style="display: none">
|
||||
<form onsubmit="AnchorDialog.update();return false;" action="#">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap">{#advanced_dlg.anchor_name}:</td>
|
||||
<td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#update}" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.charmap_title}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/charmap.js"></script>
|
||||
</head>
|
||||
<body id="charmap" style="display:none">
|
||||
<table align="center" border="0" cellspacing="0" cellpadding="2">
|
||||
<tr>
|
||||
<td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="charmapView" rowspan="2" align="left" valign="top">
|
||||
<!-- Chars will be rendered here -->
|
||||
</td>
|
||||
<td width="100" align="center" valign="top">
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">
|
||||
<tr>
|
||||
<td id="codeV"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="codeN"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="bottom" style="padding-bottom: 3px;">
|
||||
<table width="100" align="center" border="0" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">HTML-Code</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-size: 1px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">NUM-Code</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.charmap_title}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/charmap.js"></script>
|
||||
</head>
|
||||
<body id="charmap" style="display:none">
|
||||
<table align="center" border="0" cellspacing="0" cellpadding="2">
|
||||
<tr>
|
||||
<td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="charmapView" rowspan="2" align="left" valign="top">
|
||||
<!-- Chars will be rendered here -->
|
||||
</td>
|
||||
<td width="100" align="center" valign="top">
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">
|
||||
<tr>
|
||||
<td id="codeV"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="codeN"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="bottom" style="padding-bottom: 3px;">
|
||||
<table width="100" align="center" border="0" cellpadding="2" cellspacing="0">
|
||||
<tr>
|
||||
<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">HTML-Code</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-size: 1px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">NUM-Code</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,75 +1,75 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.colorpicker_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="js/color_picker.js"></script>
|
||||
</head>
|
||||
<body id="colorpicker" style="display: none">
|
||||
<form onsubmit="insertAction();return false" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>
|
||||
<li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>
|
||||
<li id="named_tab"><span><a href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="picker_panel" class="panel current">
|
||||
<fieldset>
|
||||
<legend>{#advanced_dlg.colorpicker_picker_title}</legend>
|
||||
<div id="picker">
|
||||
<img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />
|
||||
|
||||
<div id="light">
|
||||
<!-- Will be filled with divs -->
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="rgb_panel" class="panel">
|
||||
<fieldset>
|
||||
<legend>{#advanced_dlg.colorpicker_palette_title}</legend>
|
||||
<div id="webcolors">
|
||||
<!-- Gets filled with web safe colors-->
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="named_panel" class="panel">
|
||||
<fieldset>
|
||||
<legend>{#advanced_dlg.colorpicker_named_title}</legend>
|
||||
<div id="namedcolors">
|
||||
<!-- Gets filled with named colors-->
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<div id="colornamecontainer">
|
||||
{#advanced_dlg.colorpicker_name} <span id="colorname"></span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#apply}" />
|
||||
</div>
|
||||
|
||||
<div id="preview"></div>
|
||||
|
||||
<div id="previewblock">
|
||||
<label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.colorpicker_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="js/color_picker.js"></script>
|
||||
</head>
|
||||
<body id="colorpicker" style="display: none">
|
||||
<form onsubmit="insertAction();return false" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>
|
||||
<li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>
|
||||
<li id="named_tab"><span><a href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="picker_panel" class="panel current">
|
||||
<fieldset>
|
||||
<legend>{#advanced_dlg.colorpicker_picker_title}</legend>
|
||||
<div id="picker">
|
||||
<img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />
|
||||
|
||||
<div id="light">
|
||||
<!-- Will be filled with divs -->
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="rgb_panel" class="panel">
|
||||
<fieldset>
|
||||
<legend>{#advanced_dlg.colorpicker_palette_title}</legend>
|
||||
<div id="webcolors">
|
||||
<!-- Gets filled with web safe colors-->
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="named_panel" class="panel">
|
||||
<fieldset>
|
||||
<legend>{#advanced_dlg.colorpicker_named_title}</legend>
|
||||
<div id="namedcolors">
|
||||
<!-- Gets filled with named colors-->
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<div id="colornamecontainer">
|
||||
{#advanced_dlg.colorpicker_name} <span id="colorname"></span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#apply}" />
|
||||
</div>
|
||||
|
||||
<div id="preview"></div>
|
||||
|
||||
<div id="previewblock">
|
||||
<label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.image_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="../../utils/form_utils.js"></script>
|
||||
<script type="text/javascript" src="js/image.js"></script>
|
||||
</head>
|
||||
<body id="image" style="display: none">
|
||||
<form onsubmit="ImageDialog.update();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="general_panel" class="panel current">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
|
||||
<td id="srcbrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="image_list">{#advanced_dlg.image_list}</label></td>
|
||||
<td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
|
||||
<td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
|
||||
<td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
|
||||
<option value="">{#not_set}</option>
|
||||
<option value="baseline">{#advanced_dlg.image_align_baseline}</option>
|
||||
<option value="top">{#advanced_dlg.image_align_top}</option>
|
||||
<option value="middle">{#advanced_dlg.image_align_middle}</option>
|
||||
<option value="bottom">{#advanced_dlg.image_align_bottom}</option>
|
||||
<option value="text-top">{#advanced_dlg.image_align_texttop}</option>
|
||||
<option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
|
||||
<option value="left">{#advanced_dlg.image_align_left}</option>
|
||||
<option value="right">{#advanced_dlg.image_align_right}</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
|
||||
<td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
|
||||
x
|
||||
<input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
|
||||
<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
|
||||
<td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
|
||||
<td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#insert}" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.image_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="../../utils/form_utils.js"></script>
|
||||
<script type="text/javascript" src="js/image.js"></script>
|
||||
</head>
|
||||
<body id="image" style="display: none">
|
||||
<form onsubmit="ImageDialog.update();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="general_panel" class="panel current">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
|
||||
<td id="srcbrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="image_list">{#advanced_dlg.image_list}</label></td>
|
||||
<td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
|
||||
<td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
|
||||
<td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
|
||||
<option value="">{#not_set}</option>
|
||||
<option value="baseline">{#advanced_dlg.image_align_baseline}</option>
|
||||
<option value="top">{#advanced_dlg.image_align_top}</option>
|
||||
<option value="middle">{#advanced_dlg.image_align_middle}</option>
|
||||
<option value="bottom">{#advanced_dlg.image_align_bottom}</option>
|
||||
<option value="text-top">{#advanced_dlg.image_align_texttop}</option>
|
||||
<option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
|
||||
<option value="left">{#advanced_dlg.image_align_left}</option>
|
||||
<option value="right">{#advanced_dlg.image_align_right}</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
|
||||
<td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
|
||||
x
|
||||
<input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
|
||||
<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
|
||||
<td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
|
||||
<td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#insert}" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,72 +1,72 @@
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
function init() {
|
||||
var ed, tcont;
|
||||
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
ed = tinyMCEPopup.editor;
|
||||
|
||||
// Give FF some time
|
||||
window.setTimeout(insertHelpIFrame, 10);
|
||||
|
||||
tcont = document.getElementById('plugintablecontainer');
|
||||
document.getElementById('plugins_tab').style.display = 'none';
|
||||
|
||||
var html = "";
|
||||
html += '<table id="plugintable">';
|
||||
html += '<thead>';
|
||||
html += '<tr>';
|
||||
html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';
|
||||
html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';
|
||||
html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';
|
||||
html += '</tr>';
|
||||
html += '</thead>';
|
||||
html += '<tbody>';
|
||||
|
||||
tinymce.each(ed.plugins, function(p, n) {
|
||||
var info;
|
||||
|
||||
if (!p.getInfo)
|
||||
return;
|
||||
|
||||
html += '<tr>';
|
||||
|
||||
info = p.getInfo();
|
||||
|
||||
if (info.infourl != null && info.infourl != '')
|
||||
html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';
|
||||
else
|
||||
html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';
|
||||
|
||||
if (info.authorurl != null && info.authorurl != '')
|
||||
html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';
|
||||
else
|
||||
html += '<td width="35%">' + info.author + '</td>';
|
||||
|
||||
html += '<td width="15%">' + info.version + '</td>';
|
||||
html += '</tr>';
|
||||
|
||||
document.getElementById('plugins_tab').style.display = '';
|
||||
|
||||
});
|
||||
|
||||
html += '</tbody>';
|
||||
html += '</table>';
|
||||
|
||||
tcont.innerHTML = html;
|
||||
|
||||
tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;
|
||||
tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;
|
||||
}
|
||||
|
||||
function insertHelpIFrame() {
|
||||
var html;
|
||||
|
||||
if (tinyMCEPopup.getParam('docs_url')) {
|
||||
html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
|
||||
document.getElementById('iframecontainer').innerHTML = html;
|
||||
document.getElementById('help_tab').style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
function init() {
|
||||
var ed, tcont;
|
||||
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
ed = tinyMCEPopup.editor;
|
||||
|
||||
// Give FF some time
|
||||
window.setTimeout(insertHelpIFrame, 10);
|
||||
|
||||
tcont = document.getElementById('plugintablecontainer');
|
||||
document.getElementById('plugins_tab').style.display = 'none';
|
||||
|
||||
var html = "";
|
||||
html += '<table id="plugintable">';
|
||||
html += '<thead>';
|
||||
html += '<tr>';
|
||||
html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';
|
||||
html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';
|
||||
html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';
|
||||
html += '</tr>';
|
||||
html += '</thead>';
|
||||
html += '<tbody>';
|
||||
|
||||
tinymce.each(ed.plugins, function(p, n) {
|
||||
var info;
|
||||
|
||||
if (!p.getInfo)
|
||||
return;
|
||||
|
||||
html += '<tr>';
|
||||
|
||||
info = p.getInfo();
|
||||
|
||||
if (info.infourl != null && info.infourl != '')
|
||||
html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';
|
||||
else
|
||||
html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';
|
||||
|
||||
if (info.authorurl != null && info.authorurl != '')
|
||||
html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';
|
||||
else
|
||||
html += '<td width="35%">' + info.author + '</td>';
|
||||
|
||||
html += '<td width="15%">' + info.version + '</td>';
|
||||
html += '</tr>';
|
||||
|
||||
document.getElementById('plugins_tab').style.display = '';
|
||||
|
||||
});
|
||||
|
||||
html += '</tbody>';
|
||||
html += '</table>';
|
||||
|
||||
tcont.innerHTML = html;
|
||||
|
||||
tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;
|
||||
tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;
|
||||
}
|
||||
|
||||
function insertHelpIFrame() {
|
||||
var html;
|
||||
|
||||
if (tinyMCEPopup.getParam('docs_url')) {
|
||||
html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
|
||||
document.getElementById('iframecontainer').innerHTML = html;
|
||||
document.getElementById('help_tab').style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var AnchorDialog = {
|
||||
init : function(ed) {
|
||||
var action, elm, f = document.forms[0];
|
||||
|
||||
this.editor = ed;
|
||||
elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');
|
||||
v = ed.dom.getAttrib(elm, 'name');
|
||||
|
||||
if (v) {
|
||||
this.action = 'update';
|
||||
f.anchorName.value = v;
|
||||
}
|
||||
|
||||
f.insert.value = ed.getLang(elm ? 'update' : 'insert');
|
||||
},
|
||||
|
||||
update : function() {
|
||||
var ed = this.editor;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (this.action != 'update')
|
||||
ed.selection.collapse(1);
|
||||
|
||||
// Webkit acts weird if empty inline element is inserted so we need to use a image instead
|
||||
if (tinymce.isWebKit)
|
||||
ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));
|
||||
else
|
||||
ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));
|
||||
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
};
|
||||
|
||||
tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var AnchorDialog = {
|
||||
init : function(ed) {
|
||||
var action, elm, f = document.forms[0];
|
||||
|
||||
this.editor = ed;
|
||||
elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');
|
||||
v = ed.dom.getAttrib(elm, 'name');
|
||||
|
||||
if (v) {
|
||||
this.action = 'update';
|
||||
f.anchorName.value = v;
|
||||
}
|
||||
|
||||
f.insert.value = ed.getLang(elm ? 'update' : 'insert');
|
||||
},
|
||||
|
||||
update : function() {
|
||||
var ed = this.editor;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (this.action != 'update')
|
||||
ed.selection.collapse(1);
|
||||
|
||||
// Webkit acts weird if empty inline element is inserted so we need to use a image instead
|
||||
if (tinymce.isWebKit)
|
||||
ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));
|
||||
else
|
||||
ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));
|
||||
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
};
|
||||
|
||||
tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);
|
||||
|
||||
@@ -1,325 +1,325 @@
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var charmap = [
|
||||
[' ', ' ', true, 'no-break space'],
|
||||
['&', '&', true, 'ampersand'],
|
||||
['"', '"', true, 'quotation mark'],
|
||||
// finance
|
||||
['¢', '¢', true, 'cent sign'],
|
||||
['€', '€', true, 'euro sign'],
|
||||
['£', '£', true, 'pound sign'],
|
||||
['¥', '¥', true, 'yen sign'],
|
||||
// signs
|
||||
['©', '©', true, 'copyright sign'],
|
||||
['®', '®', true, 'registered sign'],
|
||||
['™', '™', true, 'trade mark sign'],
|
||||
['‰', '‰', true, 'per mille sign'],
|
||||
['µ', 'µ', true, 'micro sign'],
|
||||
['·', '·', true, 'middle dot'],
|
||||
['•', '•', true, 'bullet'],
|
||||
['…', '…', true, 'three dot leader'],
|
||||
['′', '′', true, 'minutes / feet'],
|
||||
['″', '″', true, 'seconds / inches'],
|
||||
['§', '§', true, 'section sign'],
|
||||
['¶', '¶', true, 'paragraph sign'],
|
||||
['ß', 'ß', true, 'sharp s / ess-zed'],
|
||||
// quotations
|
||||
['‹', '‹', true, 'single left-pointing angle quotation mark'],
|
||||
['›', '›', true, 'single right-pointing angle quotation mark'],
|
||||
['«', '«', true, 'left pointing guillemet'],
|
||||
['»', '»', true, 'right pointing guillemet'],
|
||||
['‘', '‘', true, 'left single quotation mark'],
|
||||
['’', '’', true, 'right single quotation mark'],
|
||||
['“', '“', true, 'left double quotation mark'],
|
||||
['”', '”', true, 'right double quotation mark'],
|
||||
['‚', '‚', true, 'single low-9 quotation mark'],
|
||||
['„', '„', true, 'double low-9 quotation mark'],
|
||||
['<', '<', true, 'less-than sign'],
|
||||
['>', '>', true, 'greater-than sign'],
|
||||
['≤', '≤', true, 'less-than or equal to'],
|
||||
['≥', '≥', true, 'greater-than or equal to'],
|
||||
['–', '–', true, 'en dash'],
|
||||
['—', '—', true, 'em dash'],
|
||||
['¯', '¯', true, 'macron'],
|
||||
['‾', '‾', true, 'overline'],
|
||||
['¤', '¤', true, 'currency sign'],
|
||||
['¦', '¦', true, 'broken bar'],
|
||||
['¨', '¨', true, 'diaeresis'],
|
||||
['¡', '¡', true, 'inverted exclamation mark'],
|
||||
['¿', '¿', true, 'turned question mark'],
|
||||
['ˆ', 'ˆ', true, 'circumflex accent'],
|
||||
['˜', '˜', true, 'small tilde'],
|
||||
['°', '°', true, 'degree sign'],
|
||||
['−', '−', true, 'minus sign'],
|
||||
['±', '±', true, 'plus-minus sign'],
|
||||
['÷', '÷', true, 'division sign'],
|
||||
['⁄', '⁄', true, 'fraction slash'],
|
||||
['×', '×', true, 'multiplication sign'],
|
||||
['¹', '¹', true, 'superscript one'],
|
||||
['²', '²', true, 'superscript two'],
|
||||
['³', '³', true, 'superscript three'],
|
||||
['¼', '¼', true, 'fraction one quarter'],
|
||||
['½', '½', true, 'fraction one half'],
|
||||
['¾', '¾', true, 'fraction three quarters'],
|
||||
// math / logical
|
||||
['ƒ', 'ƒ', true, 'function / florin'],
|
||||
['∫', '∫', true, 'integral'],
|
||||
['∑', '∑', true, 'n-ary sumation'],
|
||||
['∞', '∞', true, 'infinity'],
|
||||
['√', '√', true, 'square root'],
|
||||
['∼', '∼', false,'similar to'],
|
||||
['≅', '≅', false,'approximately equal to'],
|
||||
['≈', '≈', true, 'almost equal to'],
|
||||
['≠', '≠', true, 'not equal to'],
|
||||
['≡', '≡', true, 'identical to'],
|
||||
['∈', '∈', false,'element of'],
|
||||
['∉', '∉', false,'not an element of'],
|
||||
['∋', '∋', false,'contains as member'],
|
||||
['∏', '∏', true, 'n-ary product'],
|
||||
['∧', '∧', false,'logical and'],
|
||||
['∨', '∨', false,'logical or'],
|
||||
['¬', '¬', true, 'not sign'],
|
||||
['∩', '∩', true, 'intersection'],
|
||||
['∪', '∪', false,'union'],
|
||||
['∂', '∂', true, 'partial differential'],
|
||||
['∀', '∀', false,'for all'],
|
||||
['∃', '∃', false,'there exists'],
|
||||
['∅', '∅', false,'diameter'],
|
||||
['∇', '∇', false,'backward difference'],
|
||||
['∗', '∗', false,'asterisk operator'],
|
||||
['∝', '∝', false,'proportional to'],
|
||||
['∠', '∠', false,'angle'],
|
||||
// undefined
|
||||
['´', '´', true, 'acute accent'],
|
||||
['¸', '¸', true, 'cedilla'],
|
||||
['ª', 'ª', true, 'feminine ordinal indicator'],
|
||||
['º', 'º', true, 'masculine ordinal indicator'],
|
||||
['†', '†', true, 'dagger'],
|
||||
['‡', '‡', true, 'double dagger'],
|
||||
// alphabetical special chars
|
||||
['À', 'À', true, 'A - grave'],
|
||||
['Á', 'Á', true, 'A - acute'],
|
||||
['Â', 'Â', true, 'A - circumflex'],
|
||||
['Ã', 'Ã', true, 'A - tilde'],
|
||||
['Ä', 'Ä', true, 'A - diaeresis'],
|
||||
['Å', 'Å', true, 'A - ring above'],
|
||||
['Æ', 'Æ', true, 'ligature AE'],
|
||||
['Ç', 'Ç', true, 'C - cedilla'],
|
||||
['È', 'È', true, 'E - grave'],
|
||||
['É', 'É', true, 'E - acute'],
|
||||
['Ê', 'Ê', true, 'E - circumflex'],
|
||||
['Ë', 'Ë', true, 'E - diaeresis'],
|
||||
['Ì', 'Ì', true, 'I - grave'],
|
||||
['Í', 'Í', true, 'I - acute'],
|
||||
['Î', 'Î', true, 'I - circumflex'],
|
||||
['Ï', 'Ï', true, 'I - diaeresis'],
|
||||
['Ð', 'Ð', true, 'ETH'],
|
||||
['Ñ', 'Ñ', true, 'N - tilde'],
|
||||
['Ò', 'Ò', true, 'O - grave'],
|
||||
['Ó', 'Ó', true, 'O - acute'],
|
||||
['Ô', 'Ô', true, 'O - circumflex'],
|
||||
['Õ', 'Õ', true, 'O - tilde'],
|
||||
['Ö', 'Ö', true, 'O - diaeresis'],
|
||||
['Ø', 'Ø', true, 'O - slash'],
|
||||
['Œ', 'Œ', true, 'ligature OE'],
|
||||
['Š', 'Š', true, 'S - caron'],
|
||||
['Ù', 'Ù', true, 'U - grave'],
|
||||
['Ú', 'Ú', true, 'U - acute'],
|
||||
['Û', 'Û', true, 'U - circumflex'],
|
||||
['Ü', 'Ü', true, 'U - diaeresis'],
|
||||
['Ý', 'Ý', true, 'Y - acute'],
|
||||
['Ÿ', 'Ÿ', true, 'Y - diaeresis'],
|
||||
['Þ', 'Þ', true, 'THORN'],
|
||||
['à', 'à', true, 'a - grave'],
|
||||
['á', 'á', true, 'a - acute'],
|
||||
['â', 'â', true, 'a - circumflex'],
|
||||
['ã', 'ã', true, 'a - tilde'],
|
||||
['ä', 'ä', true, 'a - diaeresis'],
|
||||
['å', 'å', true, 'a - ring above'],
|
||||
['æ', 'æ', true, 'ligature ae'],
|
||||
['ç', 'ç', true, 'c - cedilla'],
|
||||
['è', 'è', true, 'e - grave'],
|
||||
['é', 'é', true, 'e - acute'],
|
||||
['ê', 'ê', true, 'e - circumflex'],
|
||||
['ë', 'ë', true, 'e - diaeresis'],
|
||||
['ì', 'ì', true, 'i - grave'],
|
||||
['í', 'í', true, 'i - acute'],
|
||||
['î', 'î', true, 'i - circumflex'],
|
||||
['ï', 'ï', true, 'i - diaeresis'],
|
||||
['ð', 'ð', true, 'eth'],
|
||||
['ñ', 'ñ', true, 'n - tilde'],
|
||||
['ò', 'ò', true, 'o - grave'],
|
||||
['ó', 'ó', true, 'o - acute'],
|
||||
['ô', 'ô', true, 'o - circumflex'],
|
||||
['õ', 'õ', true, 'o - tilde'],
|
||||
['ö', 'ö', true, 'o - diaeresis'],
|
||||
['ø', 'ø', true, 'o slash'],
|
||||
['œ', 'œ', true, 'ligature oe'],
|
||||
['š', 'š', true, 's - caron'],
|
||||
['ù', 'ù', true, 'u - grave'],
|
||||
['ú', 'ú', true, 'u - acute'],
|
||||
['û', 'û', true, 'u - circumflex'],
|
||||
['ü', 'ü', true, 'u - diaeresis'],
|
||||
['ý', 'ý', true, 'y - acute'],
|
||||
['þ', 'þ', true, 'thorn'],
|
||||
['ÿ', 'ÿ', true, 'y - diaeresis'],
|
||||
['Α', 'Α', true, 'Alpha'],
|
||||
['Β', 'Β', true, 'Beta'],
|
||||
['Γ', 'Γ', true, 'Gamma'],
|
||||
['Δ', 'Δ', true, 'Delta'],
|
||||
['Ε', 'Ε', true, 'Epsilon'],
|
||||
['Ζ', 'Ζ', true, 'Zeta'],
|
||||
['Η', 'Η', true, 'Eta'],
|
||||
['Θ', 'Θ', true, 'Theta'],
|
||||
['Ι', 'Ι', true, 'Iota'],
|
||||
['Κ', 'Κ', true, 'Kappa'],
|
||||
['Λ', 'Λ', true, 'Lambda'],
|
||||
['Μ', 'Μ', true, 'Mu'],
|
||||
['Ν', 'Ν', true, 'Nu'],
|
||||
['Ξ', 'Ξ', true, 'Xi'],
|
||||
['Ο', 'Ο', true, 'Omicron'],
|
||||
['Π', 'Π', true, 'Pi'],
|
||||
['Ρ', 'Ρ', true, 'Rho'],
|
||||
['Σ', 'Σ', true, 'Sigma'],
|
||||
['Τ', 'Τ', true, 'Tau'],
|
||||
['Υ', 'Υ', true, 'Upsilon'],
|
||||
['Φ', 'Φ', true, 'Phi'],
|
||||
['Χ', 'Χ', true, 'Chi'],
|
||||
['Ψ', 'Ψ', true, 'Psi'],
|
||||
['Ω', 'Ω', true, 'Omega'],
|
||||
['α', 'α', true, 'alpha'],
|
||||
['β', 'β', true, 'beta'],
|
||||
['γ', 'γ', true, 'gamma'],
|
||||
['δ', 'δ', true, 'delta'],
|
||||
['ε', 'ε', true, 'epsilon'],
|
||||
['ζ', 'ζ', true, 'zeta'],
|
||||
['η', 'η', true, 'eta'],
|
||||
['θ', 'θ', true, 'theta'],
|
||||
['ι', 'ι', true, 'iota'],
|
||||
['κ', 'κ', true, 'kappa'],
|
||||
['λ', 'λ', true, 'lambda'],
|
||||
['μ', 'μ', true, 'mu'],
|
||||
['ν', 'ν', true, 'nu'],
|
||||
['ξ', 'ξ', true, 'xi'],
|
||||
['ο', 'ο', true, 'omicron'],
|
||||
['π', 'π', true, 'pi'],
|
||||
['ρ', 'ρ', true, 'rho'],
|
||||
['ς', 'ς', true, 'final sigma'],
|
||||
['σ', 'σ', true, 'sigma'],
|
||||
['τ', 'τ', true, 'tau'],
|
||||
['υ', 'υ', true, 'upsilon'],
|
||||
['φ', 'φ', true, 'phi'],
|
||||
['χ', 'χ', true, 'chi'],
|
||||
['ψ', 'ψ', true, 'psi'],
|
||||
['ω', 'ω', true, 'omega'],
|
||||
// symbols
|
||||
['ℵ', 'ℵ', false,'alef symbol'],
|
||||
['ϖ', 'ϖ', false,'pi symbol'],
|
||||
['ℜ', 'ℜ', false,'real part symbol'],
|
||||
['ϑ','ϑ', false,'theta symbol'],
|
||||
['ϒ', 'ϒ', false,'upsilon - hook symbol'],
|
||||
['℘', '℘', false,'Weierstrass p'],
|
||||
['ℑ', 'ℑ', false,'imaginary part'],
|
||||
// arrows
|
||||
['←', '←', true, 'leftwards arrow'],
|
||||
['↑', '↑', true, 'upwards arrow'],
|
||||
['→', '→', true, 'rightwards arrow'],
|
||||
['↓', '↓', true, 'downwards arrow'],
|
||||
['↔', '↔', true, 'left right arrow'],
|
||||
['↵', '↵', false,'carriage return'],
|
||||
['⇐', '⇐', false,'leftwards double arrow'],
|
||||
['⇑', '⇑', false,'upwards double arrow'],
|
||||
['⇒', '⇒', false,'rightwards double arrow'],
|
||||
['⇓', '⇓', false,'downwards double arrow'],
|
||||
['⇔', '⇔', false,'left right double arrow'],
|
||||
['∴', '∴', false,'therefore'],
|
||||
['⊂', '⊂', false,'subset of'],
|
||||
['⊃', '⊃', false,'superset of'],
|
||||
['⊄', '⊄', false,'not a subset of'],
|
||||
['⊆', '⊆', false,'subset of or equal to'],
|
||||
['⊇', '⊇', false,'superset of or equal to'],
|
||||
['⊕', '⊕', false,'circled plus'],
|
||||
['⊗', '⊗', false,'circled times'],
|
||||
['⊥', '⊥', false,'perpendicular'],
|
||||
['⋅', '⋅', false,'dot operator'],
|
||||
['⌈', '⌈', false,'left ceiling'],
|
||||
['⌉', '⌉', false,'right ceiling'],
|
||||
['⌊', '⌊', false,'left floor'],
|
||||
['⌋', '⌋', false,'right floor'],
|
||||
['⟨', '〈', false,'left-pointing angle bracket'],
|
||||
['⟩', '〉', false,'right-pointing angle bracket'],
|
||||
['◊', '◊', true,'lozenge'],
|
||||
['♠', '♠', false,'black spade suit'],
|
||||
['♣', '♣', true, 'black club suit'],
|
||||
['♥', '♥', true, 'black heart suit'],
|
||||
['♦', '♦', true, 'black diamond suit'],
|
||||
[' ', ' ', false,'en space'],
|
||||
[' ', ' ', false,'em space'],
|
||||
[' ', ' ', false,'thin space'],
|
||||
['‌', '‌', false,'zero width non-joiner'],
|
||||
['‍', '‍', false,'zero width joiner'],
|
||||
['‎', '‎', false,'left-to-right mark'],
|
||||
['‏', '‏', false,'right-to-left mark'],
|
||||
['­', '­', false,'soft hyphen']
|
||||
];
|
||||
|
||||
tinyMCEPopup.onInit.add(function() {
|
||||
tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
|
||||
});
|
||||
|
||||
function renderCharMapHTML() {
|
||||
var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
|
||||
var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
|
||||
var cols=-1;
|
||||
|
||||
for (i=0; i<charmap.length; i++) {
|
||||
if (charmap[i][2]==true) {
|
||||
cols++;
|
||||
html += ''
|
||||
+ '<td class="charmap">'
|
||||
+ '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
|
||||
+ charmap[i][1]
|
||||
+ '</a></td>';
|
||||
if ((cols+1) % charsPerRow == 0)
|
||||
html += '</tr><tr height="' + tdHeight + '">';
|
||||
}
|
||||
}
|
||||
|
||||
if (cols % charsPerRow > 0) {
|
||||
var padd = charsPerRow - (cols % charsPerRow);
|
||||
for (var i=0; i<padd-1; i++)
|
||||
html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"> </td>';
|
||||
}
|
||||
|
||||
html += '</tr></table>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function insertChar(chr) {
|
||||
tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
|
||||
|
||||
// Refocus in window
|
||||
if (tinyMCEPopup.isWindow)
|
||||
window.focus();
|
||||
|
||||
tinyMCEPopup.editor.focus();
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function previewChar(codeA, codeB, codeN) {
|
||||
var elmA = document.getElementById('codeA');
|
||||
var elmB = document.getElementById('codeB');
|
||||
var elmV = document.getElementById('codeV');
|
||||
var elmN = document.getElementById('codeN');
|
||||
|
||||
if (codeA=='#160;') {
|
||||
elmV.innerHTML = '__';
|
||||
} else {
|
||||
elmV.innerHTML = '&' + codeA;
|
||||
}
|
||||
|
||||
elmB.innerHTML = '&' + codeA;
|
||||
elmA.innerHTML = '&' + codeB;
|
||||
elmN.innerHTML = codeN;
|
||||
}
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var charmap = [
|
||||
[' ', ' ', true, 'no-break space'],
|
||||
['&', '&', true, 'ampersand'],
|
||||
['"', '"', true, 'quotation mark'],
|
||||
// finance
|
||||
['¢', '¢', true, 'cent sign'],
|
||||
['€', '€', true, 'euro sign'],
|
||||
['£', '£', true, 'pound sign'],
|
||||
['¥', '¥', true, 'yen sign'],
|
||||
// signs
|
||||
['©', '©', true, 'copyright sign'],
|
||||
['®', '®', true, 'registered sign'],
|
||||
['™', '™', true, 'trade mark sign'],
|
||||
['‰', '‰', true, 'per mille sign'],
|
||||
['µ', 'µ', true, 'micro sign'],
|
||||
['·', '·', true, 'middle dot'],
|
||||
['•', '•', true, 'bullet'],
|
||||
['…', '…', true, 'three dot leader'],
|
||||
['′', '′', true, 'minutes / feet'],
|
||||
['″', '″', true, 'seconds / inches'],
|
||||
['§', '§', true, 'section sign'],
|
||||
['¶', '¶', true, 'paragraph sign'],
|
||||
['ß', 'ß', true, 'sharp s / ess-zed'],
|
||||
// quotations
|
||||
['‹', '‹', true, 'single left-pointing angle quotation mark'],
|
||||
['›', '›', true, 'single right-pointing angle quotation mark'],
|
||||
['«', '«', true, 'left pointing guillemet'],
|
||||
['»', '»', true, 'right pointing guillemet'],
|
||||
['‘', '‘', true, 'left single quotation mark'],
|
||||
['’', '’', true, 'right single quotation mark'],
|
||||
['“', '“', true, 'left double quotation mark'],
|
||||
['”', '”', true, 'right double quotation mark'],
|
||||
['‚', '‚', true, 'single low-9 quotation mark'],
|
||||
['„', '„', true, 'double low-9 quotation mark'],
|
||||
['<', '<', true, 'less-than sign'],
|
||||
['>', '>', true, 'greater-than sign'],
|
||||
['≤', '≤', true, 'less-than or equal to'],
|
||||
['≥', '≥', true, 'greater-than or equal to'],
|
||||
['–', '–', true, 'en dash'],
|
||||
['—', '—', true, 'em dash'],
|
||||
['¯', '¯', true, 'macron'],
|
||||
['‾', '‾', true, 'overline'],
|
||||
['¤', '¤', true, 'currency sign'],
|
||||
['¦', '¦', true, 'broken bar'],
|
||||
['¨', '¨', true, 'diaeresis'],
|
||||
['¡', '¡', true, 'inverted exclamation mark'],
|
||||
['¿', '¿', true, 'turned question mark'],
|
||||
['ˆ', 'ˆ', true, 'circumflex accent'],
|
||||
['˜', '˜', true, 'small tilde'],
|
||||
['°', '°', true, 'degree sign'],
|
||||
['−', '−', true, 'minus sign'],
|
||||
['±', '±', true, 'plus-minus sign'],
|
||||
['÷', '÷', true, 'division sign'],
|
||||
['⁄', '⁄', true, 'fraction slash'],
|
||||
['×', '×', true, 'multiplication sign'],
|
||||
['¹', '¹', true, 'superscript one'],
|
||||
['²', '²', true, 'superscript two'],
|
||||
['³', '³', true, 'superscript three'],
|
||||
['¼', '¼', true, 'fraction one quarter'],
|
||||
['½', '½', true, 'fraction one half'],
|
||||
['¾', '¾', true, 'fraction three quarters'],
|
||||
// math / logical
|
||||
['ƒ', 'ƒ', true, 'function / florin'],
|
||||
['∫', '∫', true, 'integral'],
|
||||
['∑', '∑', true, 'n-ary sumation'],
|
||||
['∞', '∞', true, 'infinity'],
|
||||
['√', '√', true, 'square root'],
|
||||
['∼', '∼', false,'similar to'],
|
||||
['≅', '≅', false,'approximately equal to'],
|
||||
['≈', '≈', true, 'almost equal to'],
|
||||
['≠', '≠', true, 'not equal to'],
|
||||
['≡', '≡', true, 'identical to'],
|
||||
['∈', '∈', false,'element of'],
|
||||
['∉', '∉', false,'not an element of'],
|
||||
['∋', '∋', false,'contains as member'],
|
||||
['∏', '∏', true, 'n-ary product'],
|
||||
['∧', '∧', false,'logical and'],
|
||||
['∨', '∨', false,'logical or'],
|
||||
['¬', '¬', true, 'not sign'],
|
||||
['∩', '∩', true, 'intersection'],
|
||||
['∪', '∪', false,'union'],
|
||||
['∂', '∂', true, 'partial differential'],
|
||||
['∀', '∀', false,'for all'],
|
||||
['∃', '∃', false,'there exists'],
|
||||
['∅', '∅', false,'diameter'],
|
||||
['∇', '∇', false,'backward difference'],
|
||||
['∗', '∗', false,'asterisk operator'],
|
||||
['∝', '∝', false,'proportional to'],
|
||||
['∠', '∠', false,'angle'],
|
||||
// undefined
|
||||
['´', '´', true, 'acute accent'],
|
||||
['¸', '¸', true, 'cedilla'],
|
||||
['ª', 'ª', true, 'feminine ordinal indicator'],
|
||||
['º', 'º', true, 'masculine ordinal indicator'],
|
||||
['†', '†', true, 'dagger'],
|
||||
['‡', '‡', true, 'double dagger'],
|
||||
// alphabetical special chars
|
||||
['À', 'À', true, 'A - grave'],
|
||||
['Á', 'Á', true, 'A - acute'],
|
||||
['Â', 'Â', true, 'A - circumflex'],
|
||||
['Ã', 'Ã', true, 'A - tilde'],
|
||||
['Ä', 'Ä', true, 'A - diaeresis'],
|
||||
['Å', 'Å', true, 'A - ring above'],
|
||||
['Æ', 'Æ', true, 'ligature AE'],
|
||||
['Ç', 'Ç', true, 'C - cedilla'],
|
||||
['È', 'È', true, 'E - grave'],
|
||||
['É', 'É', true, 'E - acute'],
|
||||
['Ê', 'Ê', true, 'E - circumflex'],
|
||||
['Ë', 'Ë', true, 'E - diaeresis'],
|
||||
['Ì', 'Ì', true, 'I - grave'],
|
||||
['Í', 'Í', true, 'I - acute'],
|
||||
['Î', 'Î', true, 'I - circumflex'],
|
||||
['Ï', 'Ï', true, 'I - diaeresis'],
|
||||
['Ð', 'Ð', true, 'ETH'],
|
||||
['Ñ', 'Ñ', true, 'N - tilde'],
|
||||
['Ò', 'Ò', true, 'O - grave'],
|
||||
['Ó', 'Ó', true, 'O - acute'],
|
||||
['Ô', 'Ô', true, 'O - circumflex'],
|
||||
['Õ', 'Õ', true, 'O - tilde'],
|
||||
['Ö', 'Ö', true, 'O - diaeresis'],
|
||||
['Ø', 'Ø', true, 'O - slash'],
|
||||
['Œ', 'Œ', true, 'ligature OE'],
|
||||
['Š', 'Š', true, 'S - caron'],
|
||||
['Ù', 'Ù', true, 'U - grave'],
|
||||
['Ú', 'Ú', true, 'U - acute'],
|
||||
['Û', 'Û', true, 'U - circumflex'],
|
||||
['Ü', 'Ü', true, 'U - diaeresis'],
|
||||
['Ý', 'Ý', true, 'Y - acute'],
|
||||
['Ÿ', 'Ÿ', true, 'Y - diaeresis'],
|
||||
['Þ', 'Þ', true, 'THORN'],
|
||||
['à', 'à', true, 'a - grave'],
|
||||
['á', 'á', true, 'a - acute'],
|
||||
['â', 'â', true, 'a - circumflex'],
|
||||
['ã', 'ã', true, 'a - tilde'],
|
||||
['ä', 'ä', true, 'a - diaeresis'],
|
||||
['å', 'å', true, 'a - ring above'],
|
||||
['æ', 'æ', true, 'ligature ae'],
|
||||
['ç', 'ç', true, 'c - cedilla'],
|
||||
['è', 'è', true, 'e - grave'],
|
||||
['é', 'é', true, 'e - acute'],
|
||||
['ê', 'ê', true, 'e - circumflex'],
|
||||
['ë', 'ë', true, 'e - diaeresis'],
|
||||
['ì', 'ì', true, 'i - grave'],
|
||||
['í', 'í', true, 'i - acute'],
|
||||
['î', 'î', true, 'i - circumflex'],
|
||||
['ï', 'ï', true, 'i - diaeresis'],
|
||||
['ð', 'ð', true, 'eth'],
|
||||
['ñ', 'ñ', true, 'n - tilde'],
|
||||
['ò', 'ò', true, 'o - grave'],
|
||||
['ó', 'ó', true, 'o - acute'],
|
||||
['ô', 'ô', true, 'o - circumflex'],
|
||||
['õ', 'õ', true, 'o - tilde'],
|
||||
['ö', 'ö', true, 'o - diaeresis'],
|
||||
['ø', 'ø', true, 'o slash'],
|
||||
['œ', 'œ', true, 'ligature oe'],
|
||||
['š', 'š', true, 's - caron'],
|
||||
['ù', 'ù', true, 'u - grave'],
|
||||
['ú', 'ú', true, 'u - acute'],
|
||||
['û', 'û', true, 'u - circumflex'],
|
||||
['ü', 'ü', true, 'u - diaeresis'],
|
||||
['ý', 'ý', true, 'y - acute'],
|
||||
['þ', 'þ', true, 'thorn'],
|
||||
['ÿ', 'ÿ', true, 'y - diaeresis'],
|
||||
['Α', 'Α', true, 'Alpha'],
|
||||
['Β', 'Β', true, 'Beta'],
|
||||
['Γ', 'Γ', true, 'Gamma'],
|
||||
['Δ', 'Δ', true, 'Delta'],
|
||||
['Ε', 'Ε', true, 'Epsilon'],
|
||||
['Ζ', 'Ζ', true, 'Zeta'],
|
||||
['Η', 'Η', true, 'Eta'],
|
||||
['Θ', 'Θ', true, 'Theta'],
|
||||
['Ι', 'Ι', true, 'Iota'],
|
||||
['Κ', 'Κ', true, 'Kappa'],
|
||||
['Λ', 'Λ', true, 'Lambda'],
|
||||
['Μ', 'Μ', true, 'Mu'],
|
||||
['Ν', 'Ν', true, 'Nu'],
|
||||
['Ξ', 'Ξ', true, 'Xi'],
|
||||
['Ο', 'Ο', true, 'Omicron'],
|
||||
['Π', 'Π', true, 'Pi'],
|
||||
['Ρ', 'Ρ', true, 'Rho'],
|
||||
['Σ', 'Σ', true, 'Sigma'],
|
||||
['Τ', 'Τ', true, 'Tau'],
|
||||
['Υ', 'Υ', true, 'Upsilon'],
|
||||
['Φ', 'Φ', true, 'Phi'],
|
||||
['Χ', 'Χ', true, 'Chi'],
|
||||
['Ψ', 'Ψ', true, 'Psi'],
|
||||
['Ω', 'Ω', true, 'Omega'],
|
||||
['α', 'α', true, 'alpha'],
|
||||
['β', 'β', true, 'beta'],
|
||||
['γ', 'γ', true, 'gamma'],
|
||||
['δ', 'δ', true, 'delta'],
|
||||
['ε', 'ε', true, 'epsilon'],
|
||||
['ζ', 'ζ', true, 'zeta'],
|
||||
['η', 'η', true, 'eta'],
|
||||
['θ', 'θ', true, 'theta'],
|
||||
['ι', 'ι', true, 'iota'],
|
||||
['κ', 'κ', true, 'kappa'],
|
||||
['λ', 'λ', true, 'lambda'],
|
||||
['μ', 'μ', true, 'mu'],
|
||||
['ν', 'ν', true, 'nu'],
|
||||
['ξ', 'ξ', true, 'xi'],
|
||||
['ο', 'ο', true, 'omicron'],
|
||||
['π', 'π', true, 'pi'],
|
||||
['ρ', 'ρ', true, 'rho'],
|
||||
['ς', 'ς', true, 'final sigma'],
|
||||
['σ', 'σ', true, 'sigma'],
|
||||
['τ', 'τ', true, 'tau'],
|
||||
['υ', 'υ', true, 'upsilon'],
|
||||
['φ', 'φ', true, 'phi'],
|
||||
['χ', 'χ', true, 'chi'],
|
||||
['ψ', 'ψ', true, 'psi'],
|
||||
['ω', 'ω', true, 'omega'],
|
||||
// symbols
|
||||
['ℵ', 'ℵ', false,'alef symbol'],
|
||||
['ϖ', 'ϖ', false,'pi symbol'],
|
||||
['ℜ', 'ℜ', false,'real part symbol'],
|
||||
['ϑ','ϑ', false,'theta symbol'],
|
||||
['ϒ', 'ϒ', false,'upsilon - hook symbol'],
|
||||
['℘', '℘', false,'Weierstrass p'],
|
||||
['ℑ', 'ℑ', false,'imaginary part'],
|
||||
// arrows
|
||||
['←', '←', true, 'leftwards arrow'],
|
||||
['↑', '↑', true, 'upwards arrow'],
|
||||
['→', '→', true, 'rightwards arrow'],
|
||||
['↓', '↓', true, 'downwards arrow'],
|
||||
['↔', '↔', true, 'left right arrow'],
|
||||
['↵', '↵', false,'carriage return'],
|
||||
['⇐', '⇐', false,'leftwards double arrow'],
|
||||
['⇑', '⇑', false,'upwards double arrow'],
|
||||
['⇒', '⇒', false,'rightwards double arrow'],
|
||||
['⇓', '⇓', false,'downwards double arrow'],
|
||||
['⇔', '⇔', false,'left right double arrow'],
|
||||
['∴', '∴', false,'therefore'],
|
||||
['⊂', '⊂', false,'subset of'],
|
||||
['⊃', '⊃', false,'superset of'],
|
||||
['⊄', '⊄', false,'not a subset of'],
|
||||
['⊆', '⊆', false,'subset of or equal to'],
|
||||
['⊇', '⊇', false,'superset of or equal to'],
|
||||
['⊕', '⊕', false,'circled plus'],
|
||||
['⊗', '⊗', false,'circled times'],
|
||||
['⊥', '⊥', false,'perpendicular'],
|
||||
['⋅', '⋅', false,'dot operator'],
|
||||
['⌈', '⌈', false,'left ceiling'],
|
||||
['⌉', '⌉', false,'right ceiling'],
|
||||
['⌊', '⌊', false,'left floor'],
|
||||
['⌋', '⌋', false,'right floor'],
|
||||
['⟨', '〈', false,'left-pointing angle bracket'],
|
||||
['⟩', '〉', false,'right-pointing angle bracket'],
|
||||
['◊', '◊', true,'lozenge'],
|
||||
['♠', '♠', false,'black spade suit'],
|
||||
['♣', '♣', true, 'black club suit'],
|
||||
['♥', '♥', true, 'black heart suit'],
|
||||
['♦', '♦', true, 'black diamond suit'],
|
||||
[' ', ' ', false,'en space'],
|
||||
[' ', ' ', false,'em space'],
|
||||
[' ', ' ', false,'thin space'],
|
||||
['‌', '‌', false,'zero width non-joiner'],
|
||||
['‍', '‍', false,'zero width joiner'],
|
||||
['‎', '‎', false,'left-to-right mark'],
|
||||
['‏', '‏', false,'right-to-left mark'],
|
||||
['­', '­', false,'soft hyphen']
|
||||
];
|
||||
|
||||
tinyMCEPopup.onInit.add(function() {
|
||||
tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
|
||||
});
|
||||
|
||||
function renderCharMapHTML() {
|
||||
var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
|
||||
var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
|
||||
var cols=-1;
|
||||
|
||||
for (i=0; i<charmap.length; i++) {
|
||||
if (charmap[i][2]==true) {
|
||||
cols++;
|
||||
html += ''
|
||||
+ '<td class="charmap">'
|
||||
+ '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
|
||||
+ charmap[i][1]
|
||||
+ '</a></td>';
|
||||
if ((cols+1) % charsPerRow == 0)
|
||||
html += '</tr><tr height="' + tdHeight + '">';
|
||||
}
|
||||
}
|
||||
|
||||
if (cols % charsPerRow > 0) {
|
||||
var padd = charsPerRow - (cols % charsPerRow);
|
||||
for (var i=0; i<padd-1; i++)
|
||||
html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"> </td>';
|
||||
}
|
||||
|
||||
html += '</tr></table>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function insertChar(chr) {
|
||||
tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
|
||||
|
||||
// Refocus in window
|
||||
if (tinyMCEPopup.isWindow)
|
||||
window.focus();
|
||||
|
||||
tinyMCEPopup.editor.focus();
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function previewChar(codeA, codeB, codeN) {
|
||||
var elmA = document.getElementById('codeA');
|
||||
var elmB = document.getElementById('codeB');
|
||||
var elmV = document.getElementById('codeV');
|
||||
var elmN = document.getElementById('codeN');
|
||||
|
||||
if (codeA=='#160;') {
|
||||
elmV.innerHTML = '__';
|
||||
} else {
|
||||
elmV.innerHTML = '&' + codeA;
|
||||
}
|
||||
|
||||
elmB.innerHTML = '&' + codeA;
|
||||
elmA.innerHTML = '&' + codeB;
|
||||
elmN.innerHTML = codeN;
|
||||
}
|
||||
|
||||
@@ -1,253 +1,253 @@
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
|
||||
|
||||
var colors = [
|
||||
"#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
|
||||
"#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",
|
||||
"#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",
|
||||
"#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",
|
||||
"#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",
|
||||
"#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",
|
||||
"#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",
|
||||
"#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",
|
||||
"#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",
|
||||
"#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",
|
||||
"#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",
|
||||
"#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",
|
||||
"#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",
|
||||
"#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",
|
||||
"#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",
|
||||
"#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",
|
||||
"#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",
|
||||
"#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",
|
||||
"#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",
|
||||
"#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",
|
||||
"#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",
|
||||
"#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",
|
||||
"#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",
|
||||
"#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",
|
||||
"#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",
|
||||
"#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",
|
||||
"#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"
|
||||
];
|
||||
|
||||
var named = {
|
||||
'#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
|
||||
'#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',
|
||||
'#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',
|
||||
'#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',
|
||||
'#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',
|
||||
'#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',
|
||||
'#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',
|
||||
'#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',
|
||||
'#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',
|
||||
'#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',
|
||||
'#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',
|
||||
'#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',
|
||||
'#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',
|
||||
'#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
|
||||
'#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',
|
||||
'#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',
|
||||
'#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',
|
||||
'#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',
|
||||
'#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',
|
||||
'#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',
|
||||
'#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',
|
||||
'#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
|
||||
'#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'
|
||||
};
|
||||
|
||||
function init() {
|
||||
var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
|
||||
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
|
||||
generatePicker();
|
||||
|
||||
if (inputColor) {
|
||||
changeFinalColor(inputColor);
|
||||
|
||||
col = convertHexToRGB(inputColor);
|
||||
|
||||
if (col)
|
||||
updateLight(col.r, col.g, col.b);
|
||||
}
|
||||
}
|
||||
|
||||
function insertAction() {
|
||||
var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (f)
|
||||
f(color);
|
||||
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function showColor(color, name) {
|
||||
if (name)
|
||||
document.getElementById("colorname").innerHTML = name;
|
||||
|
||||
document.getElementById("preview").style.backgroundColor = color;
|
||||
document.getElementById("color").value = color.toLowerCase();
|
||||
}
|
||||
|
||||
function convertRGBToHex(col) {
|
||||
var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
|
||||
|
||||
if (!col)
|
||||
return col;
|
||||
|
||||
var rgb = col.replace(re, "$1,$2,$3").split(',');
|
||||
if (rgb.length == 3) {
|
||||
r = parseInt(rgb[0]).toString(16);
|
||||
g = parseInt(rgb[1]).toString(16);
|
||||
b = parseInt(rgb[2]).toString(16);
|
||||
|
||||
r = r.length == 1 ? '0' + r : r;
|
||||
g = g.length == 1 ? '0' + g : g;
|
||||
b = b.length == 1 ? '0' + b : b;
|
||||
|
||||
return "#" + r + g + b;
|
||||
}
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
function convertHexToRGB(col) {
|
||||
if (col.indexOf('#') != -1) {
|
||||
col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
|
||||
|
||||
r = parseInt(col.substring(0, 2), 16);
|
||||
g = parseInt(col.substring(2, 4), 16);
|
||||
b = parseInt(col.substring(4, 6), 16);
|
||||
|
||||
return {r : r, g : g, b : b};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function generatePicker() {
|
||||
var el = document.getElementById('light'), h = '', i;
|
||||
|
||||
for (i = 0; i < detail; i++){
|
||||
h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'
|
||||
+ ' onclick="changeFinalColor(this.style.backgroundColor)"'
|
||||
+ ' onmousedown="isMouseDown = true; return false;"'
|
||||
+ ' onmouseup="isMouseDown = false;"'
|
||||
+ ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'
|
||||
+ ' onmouseover="isMouseOver = true;"'
|
||||
+ ' onmouseout="isMouseOver = false;"'
|
||||
+ '></div>';
|
||||
}
|
||||
|
||||
el.innerHTML = h;
|
||||
}
|
||||
|
||||
function generateWebColors() {
|
||||
var el = document.getElementById('webcolors'), h = '', i;
|
||||
|
||||
if (el.className == 'generated')
|
||||
return;
|
||||
|
||||
h += '<table border="0" cellspacing="1" cellpadding="0">'
|
||||
+ '<tr>';
|
||||
|
||||
for (i=0; i<colors.length; i++) {
|
||||
h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
|
||||
+ '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'
|
||||
+ '</a></td>';
|
||||
if ((i+1) % 18 == 0)
|
||||
h += '</tr><tr>';
|
||||
}
|
||||
|
||||
h += '</table>';
|
||||
|
||||
el.innerHTML = h;
|
||||
el.className = 'generated';
|
||||
}
|
||||
|
||||
function generateNamedColors() {
|
||||
var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;
|
||||
|
||||
if (el.className == 'generated')
|
||||
return;
|
||||
|
||||
for (n in named) {
|
||||
v = named[n];
|
||||
h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'
|
||||
}
|
||||
|
||||
el.innerHTML = h;
|
||||
el.className = 'generated';
|
||||
}
|
||||
|
||||
function dechex(n) {
|
||||
return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);
|
||||
}
|
||||
|
||||
function computeColor(e) {
|
||||
var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;
|
||||
|
||||
x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);
|
||||
y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);
|
||||
|
||||
partWidth = document.getElementById('colors').width / 6;
|
||||
partDetail = detail / 2;
|
||||
imHeight = document.getElementById('colors').height;
|
||||
|
||||
r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
|
||||
g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
|
||||
b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);
|
||||
|
||||
coef = (imHeight - y) / imHeight;
|
||||
r = 128 + (r - 128) * coef;
|
||||
g = 128 + (g - 128) * coef;
|
||||
b = 128 + (b - 128) * coef;
|
||||
|
||||
changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));
|
||||
updateLight(r, g, b);
|
||||
}
|
||||
|
||||
function updateLight(r, g, b) {
|
||||
var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;
|
||||
|
||||
for (i=0; i<detail; i++) {
|
||||
if ((i>=0) && (i<partDetail)) {
|
||||
finalCoef = i / partDetail;
|
||||
finalR = dechex(255 - (255 - r) * finalCoef);
|
||||
finalG = dechex(255 - (255 - g) * finalCoef);
|
||||
finalB = dechex(255 - (255 - b) * finalCoef);
|
||||
} else {
|
||||
finalCoef = 2 - i / partDetail;
|
||||
finalR = dechex(r * finalCoef);
|
||||
finalG = dechex(g * finalCoef);
|
||||
finalB = dechex(b * finalCoef);
|
||||
}
|
||||
|
||||
color = finalR + finalG + finalB;
|
||||
|
||||
setCol('gs' + i, '#'+color);
|
||||
}
|
||||
}
|
||||
|
||||
function changeFinalColor(color) {
|
||||
if (color.indexOf('#') == -1)
|
||||
color = convertRGBToHex(color);
|
||||
|
||||
setCol('preview', color);
|
||||
document.getElementById('color').value = color;
|
||||
}
|
||||
|
||||
function setCol(e, c) {
|
||||
try {
|
||||
document.getElementById(e).style.backgroundColor = c;
|
||||
} catch (ex) {
|
||||
// Ignore IE warning
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
|
||||
|
||||
var colors = [
|
||||
"#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
|
||||
"#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",
|
||||
"#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",
|
||||
"#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",
|
||||
"#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",
|
||||
"#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",
|
||||
"#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",
|
||||
"#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",
|
||||
"#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",
|
||||
"#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",
|
||||
"#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",
|
||||
"#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",
|
||||
"#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",
|
||||
"#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",
|
||||
"#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",
|
||||
"#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",
|
||||
"#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",
|
||||
"#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",
|
||||
"#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",
|
||||
"#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",
|
||||
"#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",
|
||||
"#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",
|
||||
"#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",
|
||||
"#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",
|
||||
"#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",
|
||||
"#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",
|
||||
"#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"
|
||||
];
|
||||
|
||||
var named = {
|
||||
'#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
|
||||
'#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',
|
||||
'#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',
|
||||
'#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',
|
||||
'#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',
|
||||
'#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',
|
||||
'#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',
|
||||
'#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',
|
||||
'#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',
|
||||
'#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',
|
||||
'#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',
|
||||
'#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',
|
||||
'#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',
|
||||
'#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
|
||||
'#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',
|
||||
'#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',
|
||||
'#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',
|
||||
'#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',
|
||||
'#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',
|
||||
'#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',
|
||||
'#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',
|
||||
'#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
|
||||
'#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'
|
||||
};
|
||||
|
||||
function init() {
|
||||
var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
|
||||
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
|
||||
generatePicker();
|
||||
|
||||
if (inputColor) {
|
||||
changeFinalColor(inputColor);
|
||||
|
||||
col = convertHexToRGB(inputColor);
|
||||
|
||||
if (col)
|
||||
updateLight(col.r, col.g, col.b);
|
||||
}
|
||||
}
|
||||
|
||||
function insertAction() {
|
||||
var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (f)
|
||||
f(color);
|
||||
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function showColor(color, name) {
|
||||
if (name)
|
||||
document.getElementById("colorname").innerHTML = name;
|
||||
|
||||
document.getElementById("preview").style.backgroundColor = color;
|
||||
document.getElementById("color").value = color.toLowerCase();
|
||||
}
|
||||
|
||||
function convertRGBToHex(col) {
|
||||
var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
|
||||
|
||||
if (!col)
|
||||
return col;
|
||||
|
||||
var rgb = col.replace(re, "$1,$2,$3").split(',');
|
||||
if (rgb.length == 3) {
|
||||
r = parseInt(rgb[0]).toString(16);
|
||||
g = parseInt(rgb[1]).toString(16);
|
||||
b = parseInt(rgb[2]).toString(16);
|
||||
|
||||
r = r.length == 1 ? '0' + r : r;
|
||||
g = g.length == 1 ? '0' + g : g;
|
||||
b = b.length == 1 ? '0' + b : b;
|
||||
|
||||
return "#" + r + g + b;
|
||||
}
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
function convertHexToRGB(col) {
|
||||
if (col.indexOf('#') != -1) {
|
||||
col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
|
||||
|
||||
r = parseInt(col.substring(0, 2), 16);
|
||||
g = parseInt(col.substring(2, 4), 16);
|
||||
b = parseInt(col.substring(4, 6), 16);
|
||||
|
||||
return {r : r, g : g, b : b};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function generatePicker() {
|
||||
var el = document.getElementById('light'), h = '', i;
|
||||
|
||||
for (i = 0; i < detail; i++){
|
||||
h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'
|
||||
+ ' onclick="changeFinalColor(this.style.backgroundColor)"'
|
||||
+ ' onmousedown="isMouseDown = true; return false;"'
|
||||
+ ' onmouseup="isMouseDown = false;"'
|
||||
+ ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'
|
||||
+ ' onmouseover="isMouseOver = true;"'
|
||||
+ ' onmouseout="isMouseOver = false;"'
|
||||
+ '></div>';
|
||||
}
|
||||
|
||||
el.innerHTML = h;
|
||||
}
|
||||
|
||||
function generateWebColors() {
|
||||
var el = document.getElementById('webcolors'), h = '', i;
|
||||
|
||||
if (el.className == 'generated')
|
||||
return;
|
||||
|
||||
h += '<table border="0" cellspacing="1" cellpadding="0">'
|
||||
+ '<tr>';
|
||||
|
||||
for (i=0; i<colors.length; i++) {
|
||||
h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
|
||||
+ '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'
|
||||
+ '</a></td>';
|
||||
if ((i+1) % 18 == 0)
|
||||
h += '</tr><tr>';
|
||||
}
|
||||
|
||||
h += '</table>';
|
||||
|
||||
el.innerHTML = h;
|
||||
el.className = 'generated';
|
||||
}
|
||||
|
||||
function generateNamedColors() {
|
||||
var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;
|
||||
|
||||
if (el.className == 'generated')
|
||||
return;
|
||||
|
||||
for (n in named) {
|
||||
v = named[n];
|
||||
h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'
|
||||
}
|
||||
|
||||
el.innerHTML = h;
|
||||
el.className = 'generated';
|
||||
}
|
||||
|
||||
function dechex(n) {
|
||||
return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);
|
||||
}
|
||||
|
||||
function computeColor(e) {
|
||||
var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;
|
||||
|
||||
x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);
|
||||
y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);
|
||||
|
||||
partWidth = document.getElementById('colors').width / 6;
|
||||
partDetail = detail / 2;
|
||||
imHeight = document.getElementById('colors').height;
|
||||
|
||||
r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
|
||||
g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
|
||||
b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);
|
||||
|
||||
coef = (imHeight - y) / imHeight;
|
||||
r = 128 + (r - 128) * coef;
|
||||
g = 128 + (g - 128) * coef;
|
||||
b = 128 + (b - 128) * coef;
|
||||
|
||||
changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));
|
||||
updateLight(r, g, b);
|
||||
}
|
||||
|
||||
function updateLight(r, g, b) {
|
||||
var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;
|
||||
|
||||
for (i=0; i<detail; i++) {
|
||||
if ((i>=0) && (i<partDetail)) {
|
||||
finalCoef = i / partDetail;
|
||||
finalR = dechex(255 - (255 - r) * finalCoef);
|
||||
finalG = dechex(255 - (255 - g) * finalCoef);
|
||||
finalB = dechex(255 - (255 - b) * finalCoef);
|
||||
} else {
|
||||
finalCoef = 2 - i / partDetail;
|
||||
finalR = dechex(r * finalCoef);
|
||||
finalG = dechex(g * finalCoef);
|
||||
finalB = dechex(b * finalCoef);
|
||||
}
|
||||
|
||||
color = finalR + finalG + finalB;
|
||||
|
||||
setCol('gs' + i, '#'+color);
|
||||
}
|
||||
}
|
||||
|
||||
function changeFinalColor(color) {
|
||||
if (color.indexOf('#') == -1)
|
||||
color = convertRGBToHex(color);
|
||||
|
||||
setCol('preview', color);
|
||||
document.getElementById('color').value = color;
|
||||
}
|
||||
|
||||
function setCol(e, c) {
|
||||
try {
|
||||
document.getElementById(e).style.backgroundColor = c;
|
||||
} catch (ex) {
|
||||
// Ignore IE warning
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
|
||||
@@ -1,245 +1,245 @@
|
||||
var ImageDialog = {
|
||||
preInit : function() {
|
||||
var url;
|
||||
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
if (url = tinyMCEPopup.getParam("external_image_list_url"))
|
||||
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
||||
},
|
||||
|
||||
init : function() {
|
||||
var f = document.forms[0], ed = tinyMCEPopup.editor;
|
||||
|
||||
// Setup browse button
|
||||
document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
|
||||
if (isVisible('srcbrowser'))
|
||||
document.getElementById('src').style.width = '180px';
|
||||
|
||||
e = ed.selection.getNode();
|
||||
|
||||
this.fillFileList('image_list', 'tinyMCEImageList');
|
||||
|
||||
if (e.nodeName == 'IMG') {
|
||||
f.src.value = ed.dom.getAttrib(e, 'src');
|
||||
f.alt.value = ed.dom.getAttrib(e, 'alt');
|
||||
f.border.value = this.getAttrib(e, 'border');
|
||||
f.vspace.value = this.getAttrib(e, 'vspace');
|
||||
f.hspace.value = this.getAttrib(e, 'hspace');
|
||||
f.width.value = ed.dom.getAttrib(e, 'width');
|
||||
f.height.value = ed.dom.getAttrib(e, 'height');
|
||||
f.insert.value = ed.getLang('update');
|
||||
this.styleVal = ed.dom.getAttrib(e, 'style');
|
||||
selectByValue(f, 'image_list', f.src.value);
|
||||
selectByValue(f, 'align', this.getAttrib(e, 'align'));
|
||||
this.updateStyle();
|
||||
}
|
||||
},
|
||||
|
||||
fillFileList : function(id, l) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
l = window[l];
|
||||
|
||||
if (l && l.length > 0) {
|
||||
lst.options[lst.options.length] = new Option('', '');
|
||||
|
||||
tinymce.each(l, function(o) {
|
||||
lst.options[lst.options.length] = new Option(o[0], o[1]);
|
||||
});
|
||||
} else
|
||||
dom.remove(dom.getParent(id, 'tr'));
|
||||
},
|
||||
|
||||
update : function() {
|
||||
var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (f.src.value === '') {
|
||||
if (ed.selection.getNode().nodeName == 'IMG') {
|
||||
ed.dom.remove(ed.selection.getNode());
|
||||
ed.execCommand('mceRepaint');
|
||||
}
|
||||
|
||||
tinyMCEPopup.close();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ed.settings.inline_styles) {
|
||||
args = tinymce.extend(args, {
|
||||
vspace : nl.vspace.value,
|
||||
hspace : nl.hspace.value,
|
||||
border : nl.border.value,
|
||||
align : getSelectValue(f, 'align')
|
||||
});
|
||||
} else
|
||||
args.style = this.styleVal;
|
||||
|
||||
tinymce.extend(args, {
|
||||
src : f.src.value,
|
||||
alt : f.alt.value,
|
||||
width : f.width.value,
|
||||
height : f.height.value
|
||||
});
|
||||
|
||||
el = ed.selection.getNode();
|
||||
|
||||
if (el && el.nodeName == 'IMG') {
|
||||
ed.dom.setAttribs(el, args);
|
||||
} else {
|
||||
ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
|
||||
ed.dom.setAttribs('__mce_tmp', args);
|
||||
ed.dom.setAttrib('__mce_tmp', 'id', '');
|
||||
ed.undoManager.add();
|
||||
}
|
||||
|
||||
tinyMCEPopup.close();
|
||||
},
|
||||
|
||||
updateStyle : function() {
|
||||
var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
|
||||
|
||||
if (tinyMCEPopup.editor.settings.inline_styles) {
|
||||
st = tinyMCEPopup.dom.parseStyle(this.styleVal);
|
||||
|
||||
// Handle align
|
||||
v = getSelectValue(f, 'align');
|
||||
if (v) {
|
||||
if (v == 'left' || v == 'right') {
|
||||
st['float'] = v;
|
||||
delete st['vertical-align'];
|
||||
} else {
|
||||
st['vertical-align'] = v;
|
||||
delete st['float'];
|
||||
}
|
||||
} else {
|
||||
delete st['float'];
|
||||
delete st['vertical-align'];
|
||||
}
|
||||
|
||||
// Handle border
|
||||
v = f.border.value;
|
||||
if (v || v == '0') {
|
||||
if (v == '0')
|
||||
st['border'] = '0';
|
||||
else
|
||||
st['border'] = v + 'px solid black';
|
||||
} else
|
||||
delete st['border'];
|
||||
|
||||
// Handle hspace
|
||||
v = f.hspace.value;
|
||||
if (v) {
|
||||
delete st['margin'];
|
||||
st['margin-left'] = v + 'px';
|
||||
st['margin-right'] = v + 'px';
|
||||
} else {
|
||||
delete st['margin-left'];
|
||||
delete st['margin-right'];
|
||||
}
|
||||
|
||||
// Handle vspace
|
||||
v = f.vspace.value;
|
||||
if (v) {
|
||||
delete st['margin'];
|
||||
st['margin-top'] = v + 'px';
|
||||
st['margin-bottom'] = v + 'px';
|
||||
} else {
|
||||
delete st['margin-top'];
|
||||
delete st['margin-bottom'];
|
||||
}
|
||||
|
||||
// Merge
|
||||
st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));
|
||||
this.styleVal = dom.serializeStyle(st);
|
||||
}
|
||||
},
|
||||
|
||||
getAttrib : function(e, at) {
|
||||
var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
|
||||
|
||||
if (ed.settings.inline_styles) {
|
||||
switch (at) {
|
||||
case 'align':
|
||||
if (v = dom.getStyle(e, 'float'))
|
||||
return v;
|
||||
|
||||
if (v = dom.getStyle(e, 'vertical-align'))
|
||||
return v;
|
||||
|
||||
break;
|
||||
|
||||
case 'hspace':
|
||||
v = dom.getStyle(e, 'margin-left')
|
||||
v2 = dom.getStyle(e, 'margin-right');
|
||||
if (v && v == v2)
|
||||
return parseInt(v.replace(/[^0-9]/g, ''));
|
||||
|
||||
break;
|
||||
|
||||
case 'vspace':
|
||||
v = dom.getStyle(e, 'margin-top')
|
||||
v2 = dom.getStyle(e, 'margin-bottom');
|
||||
if (v && v == v2)
|
||||
return parseInt(v.replace(/[^0-9]/g, ''));
|
||||
|
||||
break;
|
||||
|
||||
case 'border':
|
||||
v = 0;
|
||||
|
||||
tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
|
||||
sv = dom.getStyle(e, 'border-' + sv + '-width');
|
||||
|
||||
// False or not the same as prev
|
||||
if (!sv || (sv != v && v !== 0)) {
|
||||
v = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sv)
|
||||
v = sv;
|
||||
});
|
||||
|
||||
if (v)
|
||||
return parseInt(v.replace(/[^0-9]/g, ''));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (v = dom.getAttrib(e, at))
|
||||
return v;
|
||||
|
||||
return '';
|
||||
},
|
||||
|
||||
resetImageData : function() {
|
||||
var f = document.forms[0];
|
||||
|
||||
f.width.value = f.height.value = "";
|
||||
},
|
||||
|
||||
updateImageData : function() {
|
||||
var f = document.forms[0], t = ImageDialog;
|
||||
|
||||
if (f.width.value == "")
|
||||
f.width.value = t.preloadImg.width;
|
||||
|
||||
if (f.height.value == "")
|
||||
f.height.value = t.preloadImg.height;
|
||||
},
|
||||
|
||||
getImageData : function() {
|
||||
var f = document.forms[0];
|
||||
|
||||
this.preloadImg = new Image();
|
||||
this.preloadImg.onload = this.updateImageData;
|
||||
this.preloadImg.onerror = this.resetImageData;
|
||||
this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
|
||||
}
|
||||
};
|
||||
|
||||
ImageDialog.preInit();
|
||||
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
|
||||
var ImageDialog = {
|
||||
preInit : function() {
|
||||
var url;
|
||||
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
if (url = tinyMCEPopup.getParam("external_image_list_url"))
|
||||
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
||||
},
|
||||
|
||||
init : function() {
|
||||
var f = document.forms[0], ed = tinyMCEPopup.editor;
|
||||
|
||||
// Setup browse button
|
||||
document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
|
||||
if (isVisible('srcbrowser'))
|
||||
document.getElementById('src').style.width = '180px';
|
||||
|
||||
e = ed.selection.getNode();
|
||||
|
||||
this.fillFileList('image_list', 'tinyMCEImageList');
|
||||
|
||||
if (e.nodeName == 'IMG') {
|
||||
f.src.value = ed.dom.getAttrib(e, 'src');
|
||||
f.alt.value = ed.dom.getAttrib(e, 'alt');
|
||||
f.border.value = this.getAttrib(e, 'border');
|
||||
f.vspace.value = this.getAttrib(e, 'vspace');
|
||||
f.hspace.value = this.getAttrib(e, 'hspace');
|
||||
f.width.value = ed.dom.getAttrib(e, 'width');
|
||||
f.height.value = ed.dom.getAttrib(e, 'height');
|
||||
f.insert.value = ed.getLang('update');
|
||||
this.styleVal = ed.dom.getAttrib(e, 'style');
|
||||
selectByValue(f, 'image_list', f.src.value);
|
||||
selectByValue(f, 'align', this.getAttrib(e, 'align'));
|
||||
this.updateStyle();
|
||||
}
|
||||
},
|
||||
|
||||
fillFileList : function(id, l) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
l = window[l];
|
||||
|
||||
if (l && l.length > 0) {
|
||||
lst.options[lst.options.length] = new Option('', '');
|
||||
|
||||
tinymce.each(l, function(o) {
|
||||
lst.options[lst.options.length] = new Option(o[0], o[1]);
|
||||
});
|
||||
} else
|
||||
dom.remove(dom.getParent(id, 'tr'));
|
||||
},
|
||||
|
||||
update : function() {
|
||||
var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (f.src.value === '') {
|
||||
if (ed.selection.getNode().nodeName == 'IMG') {
|
||||
ed.dom.remove(ed.selection.getNode());
|
||||
ed.execCommand('mceRepaint');
|
||||
}
|
||||
|
||||
tinyMCEPopup.close();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ed.settings.inline_styles) {
|
||||
args = tinymce.extend(args, {
|
||||
vspace : nl.vspace.value,
|
||||
hspace : nl.hspace.value,
|
||||
border : nl.border.value,
|
||||
align : getSelectValue(f, 'align')
|
||||
});
|
||||
} else
|
||||
args.style = this.styleVal;
|
||||
|
||||
tinymce.extend(args, {
|
||||
src : f.src.value,
|
||||
alt : f.alt.value,
|
||||
width : f.width.value,
|
||||
height : f.height.value
|
||||
});
|
||||
|
||||
el = ed.selection.getNode();
|
||||
|
||||
if (el && el.nodeName == 'IMG') {
|
||||
ed.dom.setAttribs(el, args);
|
||||
} else {
|
||||
ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
|
||||
ed.dom.setAttribs('__mce_tmp', args);
|
||||
ed.dom.setAttrib('__mce_tmp', 'id', '');
|
||||
ed.undoManager.add();
|
||||
}
|
||||
|
||||
tinyMCEPopup.close();
|
||||
},
|
||||
|
||||
updateStyle : function() {
|
||||
var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
|
||||
|
||||
if (tinyMCEPopup.editor.settings.inline_styles) {
|
||||
st = tinyMCEPopup.dom.parseStyle(this.styleVal);
|
||||
|
||||
// Handle align
|
||||
v = getSelectValue(f, 'align');
|
||||
if (v) {
|
||||
if (v == 'left' || v == 'right') {
|
||||
st['float'] = v;
|
||||
delete st['vertical-align'];
|
||||
} else {
|
||||
st['vertical-align'] = v;
|
||||
delete st['float'];
|
||||
}
|
||||
} else {
|
||||
delete st['float'];
|
||||
delete st['vertical-align'];
|
||||
}
|
||||
|
||||
// Handle border
|
||||
v = f.border.value;
|
||||
if (v || v == '0') {
|
||||
if (v == '0')
|
||||
st['border'] = '0';
|
||||
else
|
||||
st['border'] = v + 'px solid black';
|
||||
} else
|
||||
delete st['border'];
|
||||
|
||||
// Handle hspace
|
||||
v = f.hspace.value;
|
||||
if (v) {
|
||||
delete st['margin'];
|
||||
st['margin-left'] = v + 'px';
|
||||
st['margin-right'] = v + 'px';
|
||||
} else {
|
||||
delete st['margin-left'];
|
||||
delete st['margin-right'];
|
||||
}
|
||||
|
||||
// Handle vspace
|
||||
v = f.vspace.value;
|
||||
if (v) {
|
||||
delete st['margin'];
|
||||
st['margin-top'] = v + 'px';
|
||||
st['margin-bottom'] = v + 'px';
|
||||
} else {
|
||||
delete st['margin-top'];
|
||||
delete st['margin-bottom'];
|
||||
}
|
||||
|
||||
// Merge
|
||||
st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));
|
||||
this.styleVal = dom.serializeStyle(st);
|
||||
}
|
||||
},
|
||||
|
||||
getAttrib : function(e, at) {
|
||||
var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
|
||||
|
||||
if (ed.settings.inline_styles) {
|
||||
switch (at) {
|
||||
case 'align':
|
||||
if (v = dom.getStyle(e, 'float'))
|
||||
return v;
|
||||
|
||||
if (v = dom.getStyle(e, 'vertical-align'))
|
||||
return v;
|
||||
|
||||
break;
|
||||
|
||||
case 'hspace':
|
||||
v = dom.getStyle(e, 'margin-left')
|
||||
v2 = dom.getStyle(e, 'margin-right');
|
||||
if (v && v == v2)
|
||||
return parseInt(v.replace(/[^0-9]/g, ''));
|
||||
|
||||
break;
|
||||
|
||||
case 'vspace':
|
||||
v = dom.getStyle(e, 'margin-top')
|
||||
v2 = dom.getStyle(e, 'margin-bottom');
|
||||
if (v && v == v2)
|
||||
return parseInt(v.replace(/[^0-9]/g, ''));
|
||||
|
||||
break;
|
||||
|
||||
case 'border':
|
||||
v = 0;
|
||||
|
||||
tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
|
||||
sv = dom.getStyle(e, 'border-' + sv + '-width');
|
||||
|
||||
// False or not the same as prev
|
||||
if (!sv || (sv != v && v !== 0)) {
|
||||
v = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sv)
|
||||
v = sv;
|
||||
});
|
||||
|
||||
if (v)
|
||||
return parseInt(v.replace(/[^0-9]/g, ''));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (v = dom.getAttrib(e, at))
|
||||
return v;
|
||||
|
||||
return '';
|
||||
},
|
||||
|
||||
resetImageData : function() {
|
||||
var f = document.forms[0];
|
||||
|
||||
f.width.value = f.height.value = "";
|
||||
},
|
||||
|
||||
updateImageData : function() {
|
||||
var f = document.forms[0], t = ImageDialog;
|
||||
|
||||
if (f.width.value == "")
|
||||
f.width.value = t.preloadImg.width;
|
||||
|
||||
if (f.height.value == "")
|
||||
f.height.value = t.preloadImg.height;
|
||||
},
|
||||
|
||||
getImageData : function() {
|
||||
var f = document.forms[0];
|
||||
|
||||
this.preloadImg = new Image();
|
||||
this.preloadImg.onload = this.updateImageData;
|
||||
this.preloadImg.onerror = this.resetImageData;
|
||||
this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
|
||||
}
|
||||
};
|
||||
|
||||
ImageDialog.preInit();
|
||||
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
|
||||
|
||||
@@ -1,156 +1,156 @@
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var LinkDialog = {
|
||||
preInit : function() {
|
||||
var url;
|
||||
|
||||
if (url = tinyMCEPopup.getParam("external_link_list_url"))
|
||||
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
||||
},
|
||||
|
||||
init : function() {
|
||||
var f = document.forms[0], ed = tinyMCEPopup.editor;
|
||||
|
||||
// Setup browse button
|
||||
document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');
|
||||
if (isVisible('hrefbrowser'))
|
||||
document.getElementById('href').style.width = '180px';
|
||||
|
||||
this.fillClassList('class_list');
|
||||
this.fillFileList('link_list', 'tinyMCELinkList');
|
||||
this.fillTargetList('target_list');
|
||||
|
||||
if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
|
||||
f.href.value = ed.dom.getAttrib(e, 'href');
|
||||
f.linktitle.value = ed.dom.getAttrib(e, 'title');
|
||||
f.insert.value = ed.getLang('update');
|
||||
selectByValue(f, 'link_list', f.href.value);
|
||||
selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));
|
||||
selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));
|
||||
}
|
||||
},
|
||||
|
||||
update : function() {
|
||||
var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
e = ed.dom.getParent(ed.selection.getNode(), 'A');
|
||||
|
||||
// Remove element if there is no href
|
||||
if (!f.href.value) {
|
||||
if (e) {
|
||||
tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
||||
b = ed.selection.getBookmark();
|
||||
ed.dom.remove(e, 1);
|
||||
ed.selection.moveToBookmark(b);
|
||||
tinyMCEPopup.execCommand("mceEndUndoLevel");
|
||||
tinyMCEPopup.close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
||||
|
||||
// Create new anchor elements
|
||||
if (e == null) {
|
||||
ed.getDoc().execCommand("unlink", false, null);
|
||||
tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
|
||||
|
||||
tinymce.each(ed.dom.select("a"), function(n) {
|
||||
if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {
|
||||
e = n;
|
||||
|
||||
ed.dom.setAttribs(e, {
|
||||
href : f.href.value,
|
||||
title : f.linktitle.value,
|
||||
target : f.target_list ? getSelectValue(f, "target_list") : null,
|
||||
'class' : f.class_list ? getSelectValue(f, "class_list") : null
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ed.dom.setAttribs(e, {
|
||||
href : f.href.value,
|
||||
title : f.linktitle.value,
|
||||
target : f.target_list ? getSelectValue(f, "target_list") : null,
|
||||
'class' : f.class_list ? getSelectValue(f, "class_list") : null
|
||||
});
|
||||
}
|
||||
|
||||
// Don't move caret if selection was image
|
||||
if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {
|
||||
ed.focus();
|
||||
ed.selection.select(e);
|
||||
ed.selection.collapse(0);
|
||||
tinyMCEPopup.storeSelection();
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceEndUndoLevel");
|
||||
tinyMCEPopup.close();
|
||||
},
|
||||
|
||||
checkPrefix : function(n) {
|
||||
if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
|
||||
n.value = 'mailto:' + n.value;
|
||||
|
||||
if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
|
||||
n.value = 'http://' + n.value;
|
||||
},
|
||||
|
||||
fillFileList : function(id, l) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
l = window[l];
|
||||
|
||||
if (l && l.length > 0) {
|
||||
lst.options[lst.options.length] = new Option('', '');
|
||||
|
||||
tinymce.each(l, function(o) {
|
||||
lst.options[lst.options.length] = new Option(o[0], o[1]);
|
||||
});
|
||||
} else
|
||||
dom.remove(dom.getParent(id, 'tr'));
|
||||
},
|
||||
|
||||
fillClassList : function(id) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
|
||||
cl = [];
|
||||
|
||||
tinymce.each(v.split(';'), function(v) {
|
||||
var p = v.split('=');
|
||||
|
||||
cl.push({'title' : p[0], 'class' : p[1]});
|
||||
});
|
||||
} else
|
||||
cl = tinyMCEPopup.editor.dom.getClasses();
|
||||
|
||||
if (cl.length > 0) {
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
|
||||
|
||||
tinymce.each(cl, function(o) {
|
||||
lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
|
||||
});
|
||||
} else
|
||||
dom.remove(dom.getParent(id, 'tr'));
|
||||
},
|
||||
|
||||
fillTargetList : function(id) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v;
|
||||
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');
|
||||
|
||||
if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {
|
||||
tinymce.each(v.split(','), function(v) {
|
||||
v = v.split('=');
|
||||
lst.options[lst.options.length] = new Option(v[0], v[1]);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
LinkDialog.preInit();
|
||||
tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var LinkDialog = {
|
||||
preInit : function() {
|
||||
var url;
|
||||
|
||||
if (url = tinyMCEPopup.getParam("external_link_list_url"))
|
||||
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
||||
},
|
||||
|
||||
init : function() {
|
||||
var f = document.forms[0], ed = tinyMCEPopup.editor;
|
||||
|
||||
// Setup browse button
|
||||
document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');
|
||||
if (isVisible('hrefbrowser'))
|
||||
document.getElementById('href').style.width = '180px';
|
||||
|
||||
this.fillClassList('class_list');
|
||||
this.fillFileList('link_list', 'tinyMCELinkList');
|
||||
this.fillTargetList('target_list');
|
||||
|
||||
if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
|
||||
f.href.value = ed.dom.getAttrib(e, 'href');
|
||||
f.linktitle.value = ed.dom.getAttrib(e, 'title');
|
||||
f.insert.value = ed.getLang('update');
|
||||
selectByValue(f, 'link_list', f.href.value);
|
||||
selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));
|
||||
selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));
|
||||
}
|
||||
},
|
||||
|
||||
update : function() {
|
||||
var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
e = ed.dom.getParent(ed.selection.getNode(), 'A');
|
||||
|
||||
// Remove element if there is no href
|
||||
if (!f.href.value) {
|
||||
if (e) {
|
||||
tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
||||
b = ed.selection.getBookmark();
|
||||
ed.dom.remove(e, 1);
|
||||
ed.selection.moveToBookmark(b);
|
||||
tinyMCEPopup.execCommand("mceEndUndoLevel");
|
||||
tinyMCEPopup.close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
||||
|
||||
// Create new anchor elements
|
||||
if (e == null) {
|
||||
ed.getDoc().execCommand("unlink", false, null);
|
||||
tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
|
||||
|
||||
tinymce.each(ed.dom.select("a"), function(n) {
|
||||
if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {
|
||||
e = n;
|
||||
|
||||
ed.dom.setAttribs(e, {
|
||||
href : f.href.value,
|
||||
title : f.linktitle.value,
|
||||
target : f.target_list ? getSelectValue(f, "target_list") : null,
|
||||
'class' : f.class_list ? getSelectValue(f, "class_list") : null
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ed.dom.setAttribs(e, {
|
||||
href : f.href.value,
|
||||
title : f.linktitle.value,
|
||||
target : f.target_list ? getSelectValue(f, "target_list") : null,
|
||||
'class' : f.class_list ? getSelectValue(f, "class_list") : null
|
||||
});
|
||||
}
|
||||
|
||||
// Don't move caret if selection was image
|
||||
if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {
|
||||
ed.focus();
|
||||
ed.selection.select(e);
|
||||
ed.selection.collapse(0);
|
||||
tinyMCEPopup.storeSelection();
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceEndUndoLevel");
|
||||
tinyMCEPopup.close();
|
||||
},
|
||||
|
||||
checkPrefix : function(n) {
|
||||
if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
|
||||
n.value = 'mailto:' + n.value;
|
||||
|
||||
if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
|
||||
n.value = 'http://' + n.value;
|
||||
},
|
||||
|
||||
fillFileList : function(id, l) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
l = window[l];
|
||||
|
||||
if (l && l.length > 0) {
|
||||
lst.options[lst.options.length] = new Option('', '');
|
||||
|
||||
tinymce.each(l, function(o) {
|
||||
lst.options[lst.options.length] = new Option(o[0], o[1]);
|
||||
});
|
||||
} else
|
||||
dom.remove(dom.getParent(id, 'tr'));
|
||||
},
|
||||
|
||||
fillClassList : function(id) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
|
||||
cl = [];
|
||||
|
||||
tinymce.each(v.split(';'), function(v) {
|
||||
var p = v.split('=');
|
||||
|
||||
cl.push({'title' : p[0], 'class' : p[1]});
|
||||
});
|
||||
} else
|
||||
cl = tinyMCEPopup.editor.dom.getClasses();
|
||||
|
||||
if (cl.length > 0) {
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
|
||||
|
||||
tinymce.each(cl, function(o) {
|
||||
lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
|
||||
});
|
||||
} else
|
||||
dom.remove(dom.getParent(id, 'tr'));
|
||||
},
|
||||
|
||||
fillTargetList : function(id) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v;
|
||||
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');
|
||||
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');
|
||||
|
||||
if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {
|
||||
tinymce.each(v.split(','), function(v) {
|
||||
v = v.split('=');
|
||||
lst.options[lst.options.length] = new Option(v[0], v[1]);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
LinkDialog.preInit();
|
||||
tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
tinyMCEPopup.requireLangPack();
|
||||
tinyMCEPopup.onInit.add(onLoadInit);
|
||||
|
||||
function saveContent() {
|
||||
tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function onLoadInit() {
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
|
||||
// Remove Gecko spellchecking
|
||||
if (tinymce.isGecko)
|
||||
document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
|
||||
|
||||
document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});
|
||||
|
||||
if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
|
||||
setWrap('soft');
|
||||
document.getElementById('wraped').checked = true;
|
||||
}
|
||||
|
||||
resizeInputs();
|
||||
}
|
||||
|
||||
function setWrap(val) {
|
||||
var v, n, s = document.getElementById('htmlSource');
|
||||
|
||||
s.wrap = val;
|
||||
|
||||
if (!tinymce.isIE) {
|
||||
v = s.value;
|
||||
n = s.cloneNode(false);
|
||||
n.setAttribute("wrap", val);
|
||||
s.parentNode.replaceChild(n, s);
|
||||
n.value = v;
|
||||
}
|
||||
}
|
||||
|
||||
function toggleWordWrap(elm) {
|
||||
if (elm.checked)
|
||||
setWrap('soft');
|
||||
else
|
||||
setWrap('off');
|
||||
}
|
||||
|
||||
var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
|
||||
|
||||
function resizeInputs() {
|
||||
var el = document.getElementById('htmlSource');
|
||||
|
||||
if (!tinymce.isIE) {
|
||||
wHeight = self.innerHeight - 65;
|
||||
wWidth = self.innerWidth - 16;
|
||||
} else {
|
||||
wHeight = document.body.clientHeight - 70;
|
||||
wWidth = document.body.clientWidth - 16;
|
||||
}
|
||||
|
||||
el.style.height = Math.abs(wHeight) + 'px';
|
||||
el.style.width = Math.abs(wWidth) + 'px';
|
||||
}
|
||||
tinyMCEPopup.requireLangPack();
|
||||
tinyMCEPopup.onInit.add(onLoadInit);
|
||||
|
||||
function saveContent() {
|
||||
tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function onLoadInit() {
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
|
||||
// Remove Gecko spellchecking
|
||||
if (tinymce.isGecko)
|
||||
document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
|
||||
|
||||
document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});
|
||||
|
||||
if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
|
||||
setWrap('soft');
|
||||
document.getElementById('wraped').checked = true;
|
||||
}
|
||||
|
||||
resizeInputs();
|
||||
}
|
||||
|
||||
function setWrap(val) {
|
||||
var v, n, s = document.getElementById('htmlSource');
|
||||
|
||||
s.wrap = val;
|
||||
|
||||
if (!tinymce.isIE) {
|
||||
v = s.value;
|
||||
n = s.cloneNode(false);
|
||||
n.setAttribute("wrap", val);
|
||||
s.parentNode.replaceChild(n, s);
|
||||
n.value = v;
|
||||
}
|
||||
}
|
||||
|
||||
function toggleWordWrap(elm) {
|
||||
if (elm.checked)
|
||||
setWrap('soft');
|
||||
else
|
||||
setWrap('off');
|
||||
}
|
||||
|
||||
var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
|
||||
|
||||
function resizeInputs() {
|
||||
var el = document.getElementById('htmlSource');
|
||||
|
||||
if (!tinymce.isIE) {
|
||||
wHeight = self.innerHeight - 65;
|
||||
wWidth = self.innerWidth - 16;
|
||||
} else {
|
||||
wHeight = document.body.clientHeight - 70;
|
||||
wWidth = document.body.clientWidth - 16;
|
||||
}
|
||||
|
||||
el.style.height = Math.abs(wHeight) + 'px';
|
||||
el.style.width = Math.abs(wWidth) + 'px';
|
||||
}
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.link_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="../../utils/form_utils.js"></script>
|
||||
<script type="text/javascript" src="../../utils/validate.js"></script>
|
||||
<script type="text/javascript" src="js/link.js"></script>
|
||||
</head>
|
||||
<body id="link" style="display: none">
|
||||
<form onsubmit="LinkDialog.update();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="general_panel" class="panel current">
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td>
|
||||
<td id="hrefbrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="link_list">{#advanced_dlg.link_list}</label></td>
|
||||
<td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
|
||||
<td><select id="target_list" name="target_list"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
|
||||
<td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="class_list">{#class_name}</label></td>
|
||||
<td><select id="class_list" name="class_list"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#insert}" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>{#advanced_dlg.link_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="../../utils/mctabs.js"></script>
|
||||
<script type="text/javascript" src="../../utils/form_utils.js"></script>
|
||||
<script type="text/javascript" src="../../utils/validate.js"></script>
|
||||
<script type="text/javascript" src="js/link.js"></script>
|
||||
</head>
|
||||
<body id="link" style="display: none">
|
||||
<form onsubmit="LinkDialog.update();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="general_panel" class="panel current">
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td>
|
||||
<td id="hrefbrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="link_list">{#advanced_dlg.link_list}</label></td>
|
||||
<td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
|
||||
<td><select id="target_list" name="target_list"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
|
||||
<td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="class_list">{#class_name}</label></td>
|
||||
<td><select id="class_list" name="class_list"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" id="insert" name="insert" value="{#insert}" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
body, td, pre {color:#000; font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif; font-size:13px; line-height: 18px; margin:8px;}
|
||||
body {background:#FFF;}
|
||||
body.mceForceColors {background:#FFF; color:#000;}
|
||||
h1 {font-size: 2em}
|
||||
h2 {font-size: 1.5em}
|
||||
h3 {font-size: 1.17em}
|
||||
h4 {font-size: 1em}
|
||||
h5 {font-size: .83em}
|
||||
h6 {font-size: .75em}
|
||||
.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
|
||||
a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}
|
||||
img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}
|
||||
img {border:0;}
|
||||
table {cursor:default}
|
||||
table td, table th {cursor:text}
|
||||
ins {border-bottom:1px solid green; text-decoration: none; color:green}
|
||||
del {color:red; text-decoration:line-through}
|
||||
cite {border-bottom:1px dashed blue}
|
||||
acronym {border-bottom:1px dotted #CCC; cursor:help}
|
||||
abbr, html\:abbr {border-bottom:1px dashed #CCC; cursor:help}
|
||||
code {display: block; border: 1px solid #AAAAAA; background: #F1ECDD; color: #000; line-height: 16px; overflow: auto;
|
||||
font-family: 'andale mono','lucida console',monospace; font-size: 12px; padding: 10px; margin: 10px 0;}
|
||||
pre {margin: 10px 0; padding: 5px; display: block; font-size: 12px;
|
||||
background: #EAF7FF; border: 1px solid #D5E7F0; font-family: "Courier New",Helvetica,sans-serif;}
|
||||
|
||||
/* IE */
|
||||
* html body {
|
||||
scrollbar-3dlight-color:#F0F0EE;
|
||||
scrollbar-arrow-color:#676662;
|
||||
scrollbar-base-color:#F0F0EE;
|
||||
scrollbar-darkshadow-color:#DDD;
|
||||
scrollbar-face-color:#E0E0DD;
|
||||
scrollbar-highlight-color:#F0F0EE;
|
||||
scrollbar-shadow-color:#F0F0EE;
|
||||
scrollbar-track-color:#F5F5F5;
|
||||
}
|
||||
body, td, pre {color:#000; font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif; font-size:13px; line-height: 18px; margin:8px;}
|
||||
body {background:#FFF;}
|
||||
body.mceForceColors {background:#FFF; color:#000;}
|
||||
h1 {font-size: 2em}
|
||||
h2 {font-size: 1.5em}
|
||||
h3 {font-size: 1.17em}
|
||||
h4 {font-size: 1em}
|
||||
h5 {font-size: .83em}
|
||||
h6 {font-size: .75em}
|
||||
.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
|
||||
a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}
|
||||
img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}
|
||||
img {border:0;}
|
||||
table {cursor:default}
|
||||
table td, table th {cursor:text}
|
||||
ins {border-bottom:1px solid green; text-decoration: none; color:green}
|
||||
del {color:red; text-decoration:line-through}
|
||||
cite {border-bottom:1px dashed blue}
|
||||
acronym {border-bottom:1px dotted #CCC; cursor:help}
|
||||
abbr, html\:abbr {border-bottom:1px dashed #CCC; cursor:help}
|
||||
code {display: block; border: 1px solid #AAAAAA; background: #F1ECDD; color: #000; line-height: 16px; overflow: auto;
|
||||
font-family: 'andale mono','lucida console',monospace; font-size: 12px; padding: 10px; margin: 10px 0;}
|
||||
pre {margin: 10px 0; padding: 5px; display: block; font-size: 12px;
|
||||
background: #EAF7FF; border: 1px solid #D5E7F0; font-family: "Courier New",Helvetica,sans-serif;}
|
||||
|
||||
/* IE */
|
||||
* html body {
|
||||
scrollbar-3dlight-color:#F0F0EE;
|
||||
scrollbar-arrow-color:#676662;
|
||||
scrollbar-base-color:#F0F0EE;
|
||||
scrollbar-darkshadow-color:#DDD;
|
||||
scrollbar-face-color:#E0E0DD;
|
||||
scrollbar-highlight-color:#F0F0EE;
|
||||
scrollbar-shadow-color:#F0F0EE;
|
||||
scrollbar-track-color:#F5F5F5;
|
||||
}
|
||||
|
||||
@@ -1,130 +1,130 @@
|
||||
/* Generic */
|
||||
body {
|
||||
font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana; font-size:11px;
|
||||
scrollbar-3dlight-color:#F0F0EE;
|
||||
scrollbar-arrow-color:#676662;
|
||||
scrollbar-base-color:#F0F0EE;
|
||||
scrollbar-darkshadow-color:#DDDDDD;
|
||||
scrollbar-face-color:#E0E0DD;
|
||||
scrollbar-highlight-color:#F0F0EE;
|
||||
scrollbar-shadow-color:#F0F0EE;
|
||||
scrollbar-track-color:#F5F5F5;
|
||||
background:#DEE4C5;
|
||||
padding:0;
|
||||
margin:8px 8px 0 8px;
|
||||
}
|
||||
|
||||
html {background:#DEE4C5;}
|
||||
td {font-size:9pt; padding: 0 6px 0 0; line-height: 32px;}
|
||||
textarea {resize:none;outline:none;}
|
||||
a:link, a:visited {color:black;}
|
||||
a:hover {color:#2B6FB6;}
|
||||
|
||||
/* Forms */
|
||||
fieldset {margin:0; padding:4px; border:none; font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana; font-size:10pt;}
|
||||
legend {color:#BD6800; font-weight:bold; margin-top: 10px;}
|
||||
label.msg {display:none;}
|
||||
label.invalid {color:#EE0000; display:inline;}
|
||||
input.invalid {border:1px solid #EE0000;}
|
||||
input {background:#FFF; border:1px solid #CCC;}
|
||||
input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:9pt;}
|
||||
input, select, textarea {border:1px solid #808080;}
|
||||
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
|
||||
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
|
||||
.input_noborder {border:0;}
|
||||
|
||||
/* Buttons */
|
||||
#insert, #cancel, input.button, .updateButton {
|
||||
border:0; margin:0; padding:0;
|
||||
font-weight:bold;
|
||||
width:94px; height:26px;
|
||||
background: #fff url(./img/sprite.gif) repeat-x scroll center top;
|
||||
border:1px solid #AFBA7C;
|
||||
cursor:pointer;
|
||||
padding-bottom:2px;
|
||||
-moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
|
||||
-webkit-border-top-left-radius: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
#insert:hover, #cancel:hover, input.button:hover, .updateButton:hover {
|
||||
border:1px solid #545c30;
|
||||
background: #fff url(./img/sprite.gif) bottom repeat-x;
|
||||
}
|
||||
|
||||
/* Browse */
|
||||
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
|
||||
.mceOldBoxModel a.browse span {width:22px; height:20px;}
|
||||
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
|
||||
a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
|
||||
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
|
||||
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
|
||||
a.pickcolor:hover span {background-color:#B2BBD0;}
|
||||
a.pickcolor:hover span.disabled {}
|
||||
|
||||
/* Charmap */
|
||||
table.charmap {border:1px solid #AAA; text-align:center}
|
||||
td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
|
||||
#charmap a {display:block; color:#000; text-decoration:none; border:0}
|
||||
#charmap a:hover {background:#CCC;color:#2B6FB6}
|
||||
#charmap #codeN {font-size:9pt; font-family:Arial,Helvetica,sans-serif; text-align:center}
|
||||
#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
|
||||
|
||||
/* Source */
|
||||
.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
|
||||
.mceActionPanel {margin-top:5px;}
|
||||
|
||||
/* Tabs classes */
|
||||
.tabs {width:100%; height:26px; line-height:normal; }
|
||||
.tabs ul {margin:0; padding:0; list-style:none;}
|
||||
.tabs li {float:left; margin:0 2px 0 0; line-height:25px; height:26px; display:block;
|
||||
-moz-border-radius-topleft: 3px;
|
||||
-moz-border-radius-topright: 3px;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
-webkit-border-top-right-radius: 3px;
|
||||
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-bottom-top-radius: 3px;
|
||||
border-bottom-top-radius: 3px;}
|
||||
.tabs li.current {background:#f7fbe9 url(../../../../../../images/btn.png) top repeat-x;}
|
||||
.tabs span {float:left; display:block; padding:0px 9pt;}
|
||||
.tabs .current span {}
|
||||
.tabs a {text-decoration:none; font-size:13px; font-weight:bold;}
|
||||
.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
|
||||
|
||||
/* Panels */
|
||||
.panel_wrapper div.panel {display:none;}
|
||||
.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
|
||||
.panel_wrapper {padding:9pt; padding-top:5px; clear:both; background:#f7fbe9;}
|
||||
|
||||
/* Columns */
|
||||
.column {float:left;}
|
||||
.properties {width:100%;}
|
||||
.properties .column1 {}
|
||||
.properties .column2 {text-align:left;}
|
||||
|
||||
/* Titles */
|
||||
h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
|
||||
h3 {font-size:14px;}
|
||||
.title {font-size:12px; font-weight:bold; color:#BD6800;}
|
||||
|
||||
/* Dialog specific */
|
||||
#link .panel_wrapper, #link div.current {height:90px;}
|
||||
#image .panel_wrapper, #image div.current {height:220px;}
|
||||
#plugintable thead {font-weight:bold; background:#DDD;}
|
||||
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
|
||||
#plugintable {width:96%; margin-top:9pt;}
|
||||
#pluginscontainer {height:290px; overflow:auto;}
|
||||
#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
|
||||
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
|
||||
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
|
||||
#colorpicker #light div {overflow:hidden;}
|
||||
#colorpicker #previewblock {float:right; padding-left:9pt; height:20px;}
|
||||
#colorpicker .panel_wrapper div.current {height:190px;}
|
||||
#colorpicker td {padding:0;}
|
||||
#colorpicker #namedcolors {width:150px;}
|
||||
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
|
||||
#colorpicker #colornamecontainer {margin-top:5px;}
|
||||
#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
|
||||
/* Generic */
|
||||
body {
|
||||
font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana; font-size:11px;
|
||||
scrollbar-3dlight-color:#F0F0EE;
|
||||
scrollbar-arrow-color:#676662;
|
||||
scrollbar-base-color:#F0F0EE;
|
||||
scrollbar-darkshadow-color:#DDDDDD;
|
||||
scrollbar-face-color:#E0E0DD;
|
||||
scrollbar-highlight-color:#F0F0EE;
|
||||
scrollbar-shadow-color:#F0F0EE;
|
||||
scrollbar-track-color:#F5F5F5;
|
||||
background:#DEE4C5;
|
||||
padding:0;
|
||||
margin:8px 8px 0 8px;
|
||||
}
|
||||
|
||||
html {background:#DEE4C5;}
|
||||
td {font-size:9pt; padding: 0 6px 0 0; line-height: 32px;}
|
||||
textarea {resize:none;outline:none;}
|
||||
a:link, a:visited {color:black;}
|
||||
a:hover {color:#2B6FB6;}
|
||||
|
||||
/* Forms */
|
||||
fieldset {margin:0; padding:4px; border:none; font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana; font-size:10pt;}
|
||||
legend {color:#BD6800; font-weight:bold; margin-top: 10px;}
|
||||
label.msg {display:none;}
|
||||
label.invalid {color:#EE0000; display:inline;}
|
||||
input.invalid {border:1px solid #EE0000;}
|
||||
input {background:#FFF; border:1px solid #CCC;}
|
||||
input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:9pt;}
|
||||
input, select, textarea {border:1px solid #808080;}
|
||||
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
|
||||
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
|
||||
.input_noborder {border:0;}
|
||||
|
||||
/* Buttons */
|
||||
#insert, #cancel, input.button, .updateButton {
|
||||
border:0; margin:0; padding:0;
|
||||
font-weight:bold;
|
||||
width:94px; height:26px;
|
||||
background: #fff url(./img/sprite.gif) repeat-x scroll center top;
|
||||
border:1px solid #AFBA7C;
|
||||
cursor:pointer;
|
||||
padding-bottom:2px;
|
||||
-moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
|
||||
-webkit-border-top-left-radius: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
#insert:hover, #cancel:hover, input.button:hover, .updateButton:hover {
|
||||
border:1px solid #545c30;
|
||||
background: #fff url(./img/sprite.gif) bottom repeat-x;
|
||||
}
|
||||
|
||||
/* Browse */
|
||||
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
|
||||
.mceOldBoxModel a.browse span {width:22px; height:20px;}
|
||||
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
|
||||
a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
|
||||
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
|
||||
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
|
||||
a.pickcolor:hover span {background-color:#B2BBD0;}
|
||||
a.pickcolor:hover span.disabled {}
|
||||
|
||||
/* Charmap */
|
||||
table.charmap {border:1px solid #AAA; text-align:center}
|
||||
td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
|
||||
#charmap a {display:block; color:#000; text-decoration:none; border:0}
|
||||
#charmap a:hover {background:#CCC;color:#2B6FB6}
|
||||
#charmap #codeN {font-size:9pt; font-family:Arial,Helvetica,sans-serif; text-align:center}
|
||||
#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
|
||||
|
||||
/* Source */
|
||||
.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
|
||||
.mceActionPanel {margin-top:5px;}
|
||||
|
||||
/* Tabs classes */
|
||||
.tabs {width:100%; height:26px; line-height:normal; }
|
||||
.tabs ul {margin:0; padding:0; list-style:none;}
|
||||
.tabs li {float:left; margin:0 2px 0 0; line-height:25px; height:26px; display:block;
|
||||
-moz-border-radius-topleft: 3px;
|
||||
-moz-border-radius-topright: 3px;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
-webkit-border-top-right-radius: 3px;
|
||||
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-bottom-top-radius: 3px;
|
||||
border-bottom-top-radius: 3px;}
|
||||
.tabs li.current {background:#f7fbe9 url(../../../../../../images/btn.png) top repeat-x;}
|
||||
.tabs span {float:left; display:block; padding:0px 9pt;}
|
||||
.tabs .current span {}
|
||||
.tabs a {text-decoration:none; font-size:13px; font-weight:bold;}
|
||||
.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
|
||||
|
||||
/* Panels */
|
||||
.panel_wrapper div.panel {display:none;}
|
||||
.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
|
||||
.panel_wrapper {padding:9pt; padding-top:5px; clear:both; background:#f7fbe9;}
|
||||
|
||||
/* Columns */
|
||||
.column {float:left;}
|
||||
.properties {width:100%;}
|
||||
.properties .column1 {}
|
||||
.properties .column2 {text-align:left;}
|
||||
|
||||
/* Titles */
|
||||
h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
|
||||
h3 {font-size:14px;}
|
||||
.title {font-size:12px; font-weight:bold; color:#BD6800;}
|
||||
|
||||
/* Dialog specific */
|
||||
#link .panel_wrapper, #link div.current {height:90px;}
|
||||
#image .panel_wrapper, #image div.current {height:220px;}
|
||||
#plugintable thead {font-weight:bold; background:#DDD;}
|
||||
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
|
||||
#plugintable {width:96%; margin-top:9pt;}
|
||||
#pluginscontainer {height:290px; overflow:auto;}
|
||||
#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
|
||||
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
|
||||
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
|
||||
#colorpicker #light div {overflow:hidden;}
|
||||
#colorpicker #previewblock {float:right; padding-left:9pt; height:20px;}
|
||||
#colorpicker .panel_wrapper div.current {height:190px;}
|
||||
#colorpicker td {padding:0;}
|
||||
#colorpicker #namedcolors {width:150px;}
|
||||
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
|
||||
#colorpicker #colornamecontainer {margin-top:5px;}
|
||||
#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
|
||||
|
||||
@@ -1,228 +1,228 @@
|
||||
/* Reset */
|
||||
.typechoSkin table, .typechoSkin tbody, .typechoSkin a, .typechoSkin img, .typechoSkin tr, .typechoSkin div, .typechoSkin td, .typechoSkin iframe, .typechoSkin span, .typechoSkin *, .typechoSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
|
||||
.typechoSkin a:hover, .typechoSkin a:link, .typechoSkin a:visited, .typechoSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
||||
.typechoSkin table td {vertical-align:middle}
|
||||
|
||||
/* Containers */
|
||||
.typechoSkin table {background:#D3DBB3}
|
||||
.typechoSkin iframe {display:block; background:#FFF}
|
||||
.typechoSkin .mceToolbar {height:26px}
|
||||
.typechoSkin .mceLeft {text-align:left}
|
||||
.typechoSkin .mceRight {text-align:right}
|
||||
|
||||
/* External */
|
||||
.typechoSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}
|
||||
.typechoSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
|
||||
.typechoSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
|
||||
|
||||
/* Layout */
|
||||
.typechoSkin table.mceLayout {border:0; border-left:1px solid #C1CD94; border-right:1px solid #C1CD94}
|
||||
.typechoSkin table.mceLayout tr.mceFirst td {border-top:1px solid #C1CD94}
|
||||
.typechoSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #C1CD94}
|
||||
.typechoSkin table.mceToolbar, .typechoSkin tr.mceFirst .mceToolbar tr td, .typechoSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding: 2px 0;}
|
||||
.typechoSkin td.mceToolbar {padding-top:1px; vertical-align:top}
|
||||
.typechoSkin .mceIframeContainer {border-top:1px solid #C1CD94; border-bottom:1px solid #C1CD94}
|
||||
.typechoSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}
|
||||
.typechoSkin .mceStatusbar div {float:left; margin:2px}
|
||||
.typechoSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
|
||||
.typechoSkin .mceStatusbar a:hover {text-decoration:underline}
|
||||
.typechoSkin table.mceToolbar {margin-left:7px}
|
||||
.typechoSkin span.mceIcon, .typechoSkin img.mceIcon {display:block; width:20px; height:20px}
|
||||
.typechoSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
||||
.typechoSkin td.mceCenter {text-align:center;}
|
||||
.typechoSkin td.mceCenter table {margin:0 auto; text-align:left;}
|
||||
.typechoSkin td.mceRight table {margin:0 0 0 auto;}
|
||||
|
||||
/* Button */
|
||||
.typechoSkin .mceButton {display:block; border:1px solid #AFBA7C; width:20px; height:20px; margin-right:1px; padding: 2px 3px;
|
||||
background: #fff url(./img/sprite.gif) top repeat-x;
|
||||
-moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
|
||||
-webkit-border-top-left-radius: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px;}
|
||||
.typechoSkin a.mceButtonEnabled:hover {border:1px solid #545c30; background: #fff url(./img/sprite.gif) bottom repeat-x; }
|
||||
.typechoSkin a.mceButtonActive, .typechoSkin a.mceButtonSelected {border:1px solid #545c30; background: #fff url(./img/sprite.gif) bottom repeat-x; }
|
||||
.typechoSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
.typechoSkin .mceButtonLabeled {width:auto}
|
||||
.typechoSkin .mceButtonLabeled span.mceIcon {float:left}
|
||||
.typechoSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
|
||||
.typechoSkin .mceButtonDisabled .mceButtonLabel {color:#888}
|
||||
|
||||
/* Separator */
|
||||
.typechoSkin .mceSeparator {display:block; width:2px; height:20px; margin:2px 2px 0 4px}
|
||||
|
||||
/* ListBox */
|
||||
.typechoSkin .mceListBox {direction:ltr}
|
||||
.typechoSkin .mceListBox, .typechoSkin .mceListBox a {display:block}
|
||||
.typechoSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
|
||||
.typechoSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
|
||||
.typechoSkin table.mceListBoxEnabled:hover .mceText, .typechoSkin .mceListBoxHover .mceText, .typechoSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
|
||||
.typechoSkin table.mceListBoxEnabled:hover .mceOpen, .typechoSkin .mceListBoxHover .mceOpen, .typechoSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
|
||||
.typechoSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
|
||||
.typechoSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
|
||||
.typechoSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
|
||||
.typechoSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
|
||||
.typechoSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
|
||||
|
||||
/* SplitButton */
|
||||
.typechoSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
|
||||
.typechoSkin .mceSplitButton a, .typechoSkin .mceSplitButton span {height:20px; display:block}
|
||||
.typechoSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #999; border-right:0; padding: 2px 3px;
|
||||
background: #fff url(./img/sprite.gif) top repeat-x;
|
||||
-moz-border-radius-topleft: 3px; -moz-border-radius-bottomleft: 3px;
|
||||
-webkit-border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-left-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
.typechoSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}
|
||||
.typechoSkin .mceSplitButton a.mceOpen {width:9px; background: #fff url(./img/sprite.gif) top repeat-x; border:1px solid #999; padding: 2px 1px; margin-right: 1px;
|
||||
-moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 3px;
|
||||
-webkit-border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-right-radius: 3px; border-bottom-right-radius: 3px;}
|
||||
.typechoSkin .mceSplitButton span.mceOpen {background:url(../../img/icons.gif) -741px 0;}
|
||||
.typechoSkin table.mceSplitButtonEnabled:hover a.mceAction, .typechoSkin .mceSplitButtonHover a.mceAction, .typechoSkin .mceSplitButtonSelected a.mceAction {border:1px solid #555; border-right:0; background: #fff url(./img/sprite.gif) bottom repeat-x;}
|
||||
.typechoSkin table.mceSplitButtonEnabled:hover a.mceOpen, .typechoSkin .mceSplitButtonHover a.mceOpen, .typechoSkin .mceSplitButtonSelected a.mceOpen {background: #fff url(./img/sprite.gif) bottom repeat-x; border:1px solid #555;}
|
||||
.typechoSkin .mceSplitButtonDisabled .mceAction, .typechoSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
.typechoSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
|
||||
.typechoSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
|
||||
|
||||
/* ColorSplitButton */
|
||||
.typechoSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
|
||||
.typechoSkin .mceColorSplitMenu td {padding:2px}
|
||||
.typechoSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
|
||||
.typechoSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
|
||||
.typechoSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
|
||||
.typechoSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
|
||||
.typechoSkin a.mceMoreColors:hover {border:1px solid #0A246A}
|
||||
.typechoSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
|
||||
.typechoSkin .mce_forecolor span.mceAction, .typechoSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
|
||||
|
||||
/* Menu */
|
||||
.typechoSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
|
||||
.typechoSkin .mceNoIcons span.mceIcon {width:0;}
|
||||
.typechoSkin .mceNoIcons a .mceText {padding-left:10px}
|
||||
.typechoSkin .mceMenu table {background:#FFF}
|
||||
.typechoSkin .mceMenu a, .typechoSkin .mceMenu span, .typechoSkin .mceMenu {display:block}
|
||||
.typechoSkin .mceMenu td {height:20px}
|
||||
.typechoSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
|
||||
.typechoSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
|
||||
.typechoSkin .mceMenu span.mceText, .typechoSkin .mceMenu .mcePreview {font-size:11px}
|
||||
.typechoSkin .mceMenu pre.mceText {font-family:Monospace}
|
||||
.typechoSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
|
||||
.typechoSkin .mceMenu .mceMenuItemEnabled a:hover, .typechoSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
|
||||
.typechoSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
|
||||
.typechoSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
|
||||
.typechoSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
|
||||
.typechoSkin .mceMenuItemDisabled .mceText {color:#888}
|
||||
.typechoSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
|
||||
.typechoSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
|
||||
.typechoSkin .mceMenu span.mceMenuLine {display:none}
|
||||
.typechoSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
|
||||
|
||||
/* Progress,Resize */
|
||||
.typechoSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}
|
||||
.typechoSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
|
||||
.typechoSkin .mcePlaceHolder {border:1px dotted gray}
|
||||
|
||||
/* Formats */
|
||||
.typechoSkin .mce_formatPreview a {font-size:10px}
|
||||
.typechoSkin .mce_p span.mceText {}
|
||||
.typechoSkin .mce_address span.mceText {font-style:italic}
|
||||
.typechoSkin .mce_pre span.mceText {font-family:monospace}
|
||||
.typechoSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
|
||||
.typechoSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
|
||||
.typechoSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
|
||||
.typechoSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
|
||||
.typechoSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
|
||||
.typechoSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
|
||||
|
||||
/* Theme */
|
||||
.typechoSkin span.mce_bold {background-position:0 0}
|
||||
.typechoSkin span.mce_italic {background-position:-60px 0}
|
||||
.typechoSkin span.mce_underline {background-position:-140px 0}
|
||||
.typechoSkin span.mce_strikethrough {background-position:-120px 0}
|
||||
.typechoSkin span.mce_undo {background-position:-160px 0}
|
||||
.typechoSkin span.mce_redo {background-position:-100px 0}
|
||||
.typechoSkin span.mce_cleanup {background-position:-40px 0}
|
||||
.typechoSkin span.mce_bullist {background-position:-20px 0}
|
||||
.typechoSkin span.mce_numlist {background-position:-80px 0}
|
||||
.typechoSkin span.mce_justifyleft {background-position:-460px 0}
|
||||
.typechoSkin span.mce_justifyright {background-position:-480px 0}
|
||||
.typechoSkin span.mce_justifycenter {background-position:-420px 0}
|
||||
.typechoSkin span.mce_justifyfull {background-position:-440px 0}
|
||||
.typechoSkin span.mce_anchor {background-position:-200px 0}
|
||||
.typechoSkin span.mce_indent {background-position:-400px 0}
|
||||
.typechoSkin span.mce_outdent {background-position:-540px 0}
|
||||
.typechoSkin span.mce_link {background-position:-500px 0}
|
||||
.typechoSkin span.mce_unlink {background-position:-640px 0}
|
||||
.typechoSkin span.mce_sub {background-position:-600px 0}
|
||||
.typechoSkin span.mce_sup {background-position:-620px 0}
|
||||
.typechoSkin span.mce_removeformat {background-position:-580px 0}
|
||||
.typechoSkin span.mce_newdocument {background-position:-520px 0}
|
||||
.typechoSkin span.mce_image {background-position:-380px 0}
|
||||
.typechoSkin span.mce_help {background-position:-340px 0}
|
||||
.typechoSkin span.mce_code {background-position:-260px 0}
|
||||
.typechoSkin span.mce_hr {background-position:-360px 0}
|
||||
.typechoSkin span.mce_visualaid {background-position:-660px 0}
|
||||
.typechoSkin span.mce_charmap {background-position:-240px 0}
|
||||
.typechoSkin span.mce_paste {background-position:-560px 0}
|
||||
.typechoSkin span.mce_copy {background-position:-700px 0}
|
||||
.typechoSkin span.mce_cut {background-position:-680px 0}
|
||||
.typechoSkin span.mce_blockquote {background-position:-220px 0}
|
||||
.typechoSkin .mce_forecolor span.mceAction {background-position:-720px 0}
|
||||
.typechoSkin .mce_backcolor span.mceAction {background-position:-760px 0}
|
||||
.typechoSkin span.mce_forecolorpicker {background-position:-720px 0}
|
||||
.typechoSkin span.mce_backcolorpicker {background-position:-760px 0}
|
||||
|
||||
/* Plugins */
|
||||
.typechoSkin span.mce_advhr {background-position:-0px -20px}
|
||||
.typechoSkin span.mce_ltr {background-position:-20px -20px}
|
||||
.typechoSkin span.mce_rtl {background-position:-40px -20px}
|
||||
.typechoSkin span.mce_emotions {background-position:-60px -20px}
|
||||
.typechoSkin span.mce_fullpage {background-position:-80px -20px}
|
||||
.typechoSkin span.mce_fullscreen {background-position:-100px -20px}
|
||||
.typechoSkin span.mce_iespell {background-position:-120px -20px}
|
||||
.typechoSkin span.mce_insertdate {background-position:-140px -20px}
|
||||
.typechoSkin span.mce_inserttime {background-position:-160px -20px}
|
||||
.typechoSkin span.mce_absolute {background-position:-180px -20px}
|
||||
.typechoSkin span.mce_backward {background-position:-200px -20px}
|
||||
.typechoSkin span.mce_forward {background-position:-220px -20px}
|
||||
.typechoSkin span.mce_insert_layer {background-position:-240px -20px}
|
||||
.typechoSkin span.mce_insertlayer {background-position:-260px -20px}
|
||||
.typechoSkin span.mce_movebackward {background-position:-280px -20px}
|
||||
.typechoSkin span.mce_moveforward {background-position:-300px -20px}
|
||||
.typechoSkin span.mce_media {background-position:-320px -20px}
|
||||
.typechoSkin span.mce_nonbreaking {background-position:-340px -20px}
|
||||
.typechoSkin span.mce_pastetext {background-position:-360px -20px}
|
||||
.typechoSkin span.mce_pasteword {background-position:-380px -20px}
|
||||
.typechoSkin span.mce_selectall {background-position:-400px -20px}
|
||||
.typechoSkin span.mce_preview {background-position:-420px -20px}
|
||||
.typechoSkin span.mce_print {background-position:-440px -20px}
|
||||
.typechoSkin span.mce_cancel {background-position:-460px -20px}
|
||||
.typechoSkin span.mce_save {background-position:-480px -20px}
|
||||
.typechoSkin span.mce_replace {background-position:-500px -20px}
|
||||
.typechoSkin span.mce_search {background-position:-520px -20px}
|
||||
.typechoSkin span.mce_styleprops {background-position:-560px -20px}
|
||||
.typechoSkin span.mce_table {background-position:-580px -20px}
|
||||
.typechoSkin span.mce_cell_props {background-position:-600px -20px}
|
||||
.typechoSkin span.mce_delete_table {background-position:-620px -20px}
|
||||
.typechoSkin span.mce_delete_col {background-position:-640px -20px}
|
||||
.typechoSkin span.mce_delete_row {background-position:-660px -20px}
|
||||
.typechoSkin span.mce_col_after {background-position:-680px -20px}
|
||||
.typechoSkin span.mce_col_before {background-position:-700px -20px}
|
||||
.typechoSkin span.mce_row_after {background-position:-720px -20px}
|
||||
.typechoSkin span.mce_row_before {background-position:-740px -20px}
|
||||
.typechoSkin span.mce_merge_cells {background-position:-760px -20px}
|
||||
.typechoSkin span.mce_table_props {background-position:-980px -20px}
|
||||
.typechoSkin span.mce_row_props {background-position:-780px -20px}
|
||||
.typechoSkin span.mce_split_cells {background-position:-800px -20px}
|
||||
.typechoSkin span.mce_template {background-position:-820px -20px}
|
||||
.typechoSkin span.mce_visualchars {background-position:-840px -20px}
|
||||
.typechoSkin span.mce_abbr {background-position:-860px -20px}
|
||||
.typechoSkin span.mce_acronym {background-position:-880px -20px}
|
||||
.typechoSkin span.mce_attribs {background-position:-900px -20px}
|
||||
.typechoSkin span.mce_cite {background-position:-920px -20px}
|
||||
.typechoSkin span.mce_del {background-position:-940px -20px}
|
||||
.typechoSkin span.mce_ins {background-position:-960px -20px}
|
||||
.typechoSkin span.mce_morebreak {background-position:0 -40px}
|
||||
.typechoSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}
|
||||
/* Reset */
|
||||
.typechoSkin table, .typechoSkin tbody, .typechoSkin a, .typechoSkin img, .typechoSkin tr, .typechoSkin div, .typechoSkin td, .typechoSkin iframe, .typechoSkin span, .typechoSkin *, .typechoSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
|
||||
.typechoSkin a:hover, .typechoSkin a:link, .typechoSkin a:visited, .typechoSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
||||
.typechoSkin table td {vertical-align:middle}
|
||||
|
||||
/* Containers */
|
||||
.typechoSkin table {background:#D3DBB3}
|
||||
.typechoSkin iframe {display:block; background:#FFF}
|
||||
.typechoSkin .mceToolbar {height:26px}
|
||||
.typechoSkin .mceLeft {text-align:left}
|
||||
.typechoSkin .mceRight {text-align:right}
|
||||
|
||||
/* External */
|
||||
.typechoSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}
|
||||
.typechoSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
|
||||
.typechoSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
|
||||
|
||||
/* Layout */
|
||||
.typechoSkin table.mceLayout {border:0; border-left:1px solid #C1CD94; border-right:1px solid #C1CD94}
|
||||
.typechoSkin table.mceLayout tr.mceFirst td {border-top:1px solid #C1CD94}
|
||||
.typechoSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #C1CD94}
|
||||
.typechoSkin table.mceToolbar, .typechoSkin tr.mceFirst .mceToolbar tr td, .typechoSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding: 2px 0;}
|
||||
.typechoSkin td.mceToolbar {padding-top:1px; vertical-align:top}
|
||||
.typechoSkin .mceIframeContainer {border-top:1px solid #C1CD94; border-bottom:1px solid #C1CD94}
|
||||
.typechoSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}
|
||||
.typechoSkin .mceStatusbar div {float:left; margin:2px}
|
||||
.typechoSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
|
||||
.typechoSkin .mceStatusbar a:hover {text-decoration:underline}
|
||||
.typechoSkin table.mceToolbar {margin-left:7px}
|
||||
.typechoSkin span.mceIcon, .typechoSkin img.mceIcon {display:block; width:20px; height:20px}
|
||||
.typechoSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
||||
.typechoSkin td.mceCenter {text-align:center;}
|
||||
.typechoSkin td.mceCenter table {margin:0 auto; text-align:left;}
|
||||
.typechoSkin td.mceRight table {margin:0 0 0 auto;}
|
||||
|
||||
/* Button */
|
||||
.typechoSkin .mceButton {display:block; border:1px solid #AFBA7C; width:20px; height:20px; margin-right:1px; padding: 2px 3px;
|
||||
background: #fff url(./img/sprite.gif) top repeat-x;
|
||||
-moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
|
||||
-webkit-border-top-left-radius: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px;}
|
||||
.typechoSkin a.mceButtonEnabled:hover {border:1px solid #545c30; background: #fff url(./img/sprite.gif) bottom repeat-x; }
|
||||
.typechoSkin a.mceButtonActive, .typechoSkin a.mceButtonSelected {border:1px solid #545c30; background: #fff url(./img/sprite.gif) bottom repeat-x; }
|
||||
.typechoSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
.typechoSkin .mceButtonLabeled {width:auto}
|
||||
.typechoSkin .mceButtonLabeled span.mceIcon {float:left}
|
||||
.typechoSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
|
||||
.typechoSkin .mceButtonDisabled .mceButtonLabel {color:#888}
|
||||
|
||||
/* Separator */
|
||||
.typechoSkin .mceSeparator {display:block; width:2px; height:20px; margin:2px 2px 0 4px}
|
||||
|
||||
/* ListBox */
|
||||
.typechoSkin .mceListBox {direction:ltr}
|
||||
.typechoSkin .mceListBox, .typechoSkin .mceListBox a {display:block}
|
||||
.typechoSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
|
||||
.typechoSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
|
||||
.typechoSkin table.mceListBoxEnabled:hover .mceText, .typechoSkin .mceListBoxHover .mceText, .typechoSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
|
||||
.typechoSkin table.mceListBoxEnabled:hover .mceOpen, .typechoSkin .mceListBoxHover .mceOpen, .typechoSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
|
||||
.typechoSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
|
||||
.typechoSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
|
||||
.typechoSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
|
||||
.typechoSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
|
||||
.typechoSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
|
||||
|
||||
/* SplitButton */
|
||||
.typechoSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
|
||||
.typechoSkin .mceSplitButton a, .typechoSkin .mceSplitButton span {height:20px; display:block}
|
||||
.typechoSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #999; border-right:0; padding: 2px 3px;
|
||||
background: #fff url(./img/sprite.gif) top repeat-x;
|
||||
-moz-border-radius-topleft: 3px; -moz-border-radius-bottomleft: 3px;
|
||||
-webkit-border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-left-radius: 3px; border-bottom-left-radius: 3px;}
|
||||
.typechoSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}
|
||||
.typechoSkin .mceSplitButton a.mceOpen {width:9px; background: #fff url(./img/sprite.gif) top repeat-x; border:1px solid #999; padding: 2px 1px; margin-right: 1px;
|
||||
-moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 3px;
|
||||
-webkit-border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
||||
/* hope IE support border radius, God save me! */
|
||||
border-top-right-radius: 3px; border-bottom-right-radius: 3px;}
|
||||
.typechoSkin .mceSplitButton span.mceOpen {background:url(../../img/icons.gif) -741px 0;}
|
||||
.typechoSkin table.mceSplitButtonEnabled:hover a.mceAction, .typechoSkin .mceSplitButtonHover a.mceAction, .typechoSkin .mceSplitButtonSelected a.mceAction {border:1px solid #555; border-right:0; background: #fff url(./img/sprite.gif) bottom repeat-x;}
|
||||
.typechoSkin table.mceSplitButtonEnabled:hover a.mceOpen, .typechoSkin .mceSplitButtonHover a.mceOpen, .typechoSkin .mceSplitButtonSelected a.mceOpen {background: #fff url(./img/sprite.gif) bottom repeat-x; border:1px solid #555;}
|
||||
.typechoSkin .mceSplitButtonDisabled .mceAction, .typechoSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
.typechoSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
|
||||
.typechoSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
|
||||
|
||||
/* ColorSplitButton */
|
||||
.typechoSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
|
||||
.typechoSkin .mceColorSplitMenu td {padding:2px}
|
||||
.typechoSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
|
||||
.typechoSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
|
||||
.typechoSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
|
||||
.typechoSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
|
||||
.typechoSkin a.mceMoreColors:hover {border:1px solid #0A246A}
|
||||
.typechoSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
|
||||
.typechoSkin .mce_forecolor span.mceAction, .typechoSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
|
||||
|
||||
/* Menu */
|
||||
.typechoSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
|
||||
.typechoSkin .mceNoIcons span.mceIcon {width:0;}
|
||||
.typechoSkin .mceNoIcons a .mceText {padding-left:10px}
|
||||
.typechoSkin .mceMenu table {background:#FFF}
|
||||
.typechoSkin .mceMenu a, .typechoSkin .mceMenu span, .typechoSkin .mceMenu {display:block}
|
||||
.typechoSkin .mceMenu td {height:20px}
|
||||
.typechoSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
|
||||
.typechoSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
|
||||
.typechoSkin .mceMenu span.mceText, .typechoSkin .mceMenu .mcePreview {font-size:11px}
|
||||
.typechoSkin .mceMenu pre.mceText {font-family:Monospace}
|
||||
.typechoSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
|
||||
.typechoSkin .mceMenu .mceMenuItemEnabled a:hover, .typechoSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
|
||||
.typechoSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
|
||||
.typechoSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
|
||||
.typechoSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
|
||||
.typechoSkin .mceMenuItemDisabled .mceText {color:#888}
|
||||
.typechoSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
|
||||
.typechoSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
|
||||
.typechoSkin .mceMenu span.mceMenuLine {display:none}
|
||||
.typechoSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
|
||||
|
||||
/* Progress,Resize */
|
||||
.typechoSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}
|
||||
.typechoSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
|
||||
.typechoSkin .mcePlaceHolder {border:1px dotted gray}
|
||||
|
||||
/* Formats */
|
||||
.typechoSkin .mce_formatPreview a {font-size:10px}
|
||||
.typechoSkin .mce_p span.mceText {}
|
||||
.typechoSkin .mce_address span.mceText {font-style:italic}
|
||||
.typechoSkin .mce_pre span.mceText {font-family:monospace}
|
||||
.typechoSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
|
||||
.typechoSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
|
||||
.typechoSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
|
||||
.typechoSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
|
||||
.typechoSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
|
||||
.typechoSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
|
||||
|
||||
/* Theme */
|
||||
.typechoSkin span.mce_bold {background-position:0 0}
|
||||
.typechoSkin span.mce_italic {background-position:-60px 0}
|
||||
.typechoSkin span.mce_underline {background-position:-140px 0}
|
||||
.typechoSkin span.mce_strikethrough {background-position:-120px 0}
|
||||
.typechoSkin span.mce_undo {background-position:-160px 0}
|
||||
.typechoSkin span.mce_redo {background-position:-100px 0}
|
||||
.typechoSkin span.mce_cleanup {background-position:-40px 0}
|
||||
.typechoSkin span.mce_bullist {background-position:-20px 0}
|
||||
.typechoSkin span.mce_numlist {background-position:-80px 0}
|
||||
.typechoSkin span.mce_justifyleft {background-position:-460px 0}
|
||||
.typechoSkin span.mce_justifyright {background-position:-480px 0}
|
||||
.typechoSkin span.mce_justifycenter {background-position:-420px 0}
|
||||
.typechoSkin span.mce_justifyfull {background-position:-440px 0}
|
||||
.typechoSkin span.mce_anchor {background-position:-200px 0}
|
||||
.typechoSkin span.mce_indent {background-position:-400px 0}
|
||||
.typechoSkin span.mce_outdent {background-position:-540px 0}
|
||||
.typechoSkin span.mce_link {background-position:-500px 0}
|
||||
.typechoSkin span.mce_unlink {background-position:-640px 0}
|
||||
.typechoSkin span.mce_sub {background-position:-600px 0}
|
||||
.typechoSkin span.mce_sup {background-position:-620px 0}
|
||||
.typechoSkin span.mce_removeformat {background-position:-580px 0}
|
||||
.typechoSkin span.mce_newdocument {background-position:-520px 0}
|
||||
.typechoSkin span.mce_image {background-position:-380px 0}
|
||||
.typechoSkin span.mce_help {background-position:-340px 0}
|
||||
.typechoSkin span.mce_code {background-position:-260px 0}
|
||||
.typechoSkin span.mce_hr {background-position:-360px 0}
|
||||
.typechoSkin span.mce_visualaid {background-position:-660px 0}
|
||||
.typechoSkin span.mce_charmap {background-position:-240px 0}
|
||||
.typechoSkin span.mce_paste {background-position:-560px 0}
|
||||
.typechoSkin span.mce_copy {background-position:-700px 0}
|
||||
.typechoSkin span.mce_cut {background-position:-680px 0}
|
||||
.typechoSkin span.mce_blockquote {background-position:-220px 0}
|
||||
.typechoSkin .mce_forecolor span.mceAction {background-position:-720px 0}
|
||||
.typechoSkin .mce_backcolor span.mceAction {background-position:-760px 0}
|
||||
.typechoSkin span.mce_forecolorpicker {background-position:-720px 0}
|
||||
.typechoSkin span.mce_backcolorpicker {background-position:-760px 0}
|
||||
|
||||
/* Plugins */
|
||||
.typechoSkin span.mce_advhr {background-position:-0px -20px}
|
||||
.typechoSkin span.mce_ltr {background-position:-20px -20px}
|
||||
.typechoSkin span.mce_rtl {background-position:-40px -20px}
|
||||
.typechoSkin span.mce_emotions {background-position:-60px -20px}
|
||||
.typechoSkin span.mce_fullpage {background-position:-80px -20px}
|
||||
.typechoSkin span.mce_fullscreen {background-position:-100px -20px}
|
||||
.typechoSkin span.mce_iespell {background-position:-120px -20px}
|
||||
.typechoSkin span.mce_insertdate {background-position:-140px -20px}
|
||||
.typechoSkin span.mce_inserttime {background-position:-160px -20px}
|
||||
.typechoSkin span.mce_absolute {background-position:-180px -20px}
|
||||
.typechoSkin span.mce_backward {background-position:-200px -20px}
|
||||
.typechoSkin span.mce_forward {background-position:-220px -20px}
|
||||
.typechoSkin span.mce_insert_layer {background-position:-240px -20px}
|
||||
.typechoSkin span.mce_insertlayer {background-position:-260px -20px}
|
||||
.typechoSkin span.mce_movebackward {background-position:-280px -20px}
|
||||
.typechoSkin span.mce_moveforward {background-position:-300px -20px}
|
||||
.typechoSkin span.mce_media {background-position:-320px -20px}
|
||||
.typechoSkin span.mce_nonbreaking {background-position:-340px -20px}
|
||||
.typechoSkin span.mce_pastetext {background-position:-360px -20px}
|
||||
.typechoSkin span.mce_pasteword {background-position:-380px -20px}
|
||||
.typechoSkin span.mce_selectall {background-position:-400px -20px}
|
||||
.typechoSkin span.mce_preview {background-position:-420px -20px}
|
||||
.typechoSkin span.mce_print {background-position:-440px -20px}
|
||||
.typechoSkin span.mce_cancel {background-position:-460px -20px}
|
||||
.typechoSkin span.mce_save {background-position:-480px -20px}
|
||||
.typechoSkin span.mce_replace {background-position:-500px -20px}
|
||||
.typechoSkin span.mce_search {background-position:-520px -20px}
|
||||
.typechoSkin span.mce_styleprops {background-position:-560px -20px}
|
||||
.typechoSkin span.mce_table {background-position:-580px -20px}
|
||||
.typechoSkin span.mce_cell_props {background-position:-600px -20px}
|
||||
.typechoSkin span.mce_delete_table {background-position:-620px -20px}
|
||||
.typechoSkin span.mce_delete_col {background-position:-640px -20px}
|
||||
.typechoSkin span.mce_delete_row {background-position:-660px -20px}
|
||||
.typechoSkin span.mce_col_after {background-position:-680px -20px}
|
||||
.typechoSkin span.mce_col_before {background-position:-700px -20px}
|
||||
.typechoSkin span.mce_row_after {background-position:-720px -20px}
|
||||
.typechoSkin span.mce_row_before {background-position:-740px -20px}
|
||||
.typechoSkin span.mce_merge_cells {background-position:-760px -20px}
|
||||
.typechoSkin span.mce_table_props {background-position:-980px -20px}
|
||||
.typechoSkin span.mce_row_props {background-position:-780px -20px}
|
||||
.typechoSkin span.mce_split_cells {background-position:-800px -20px}
|
||||
.typechoSkin span.mce_template {background-position:-820px -20px}
|
||||
.typechoSkin span.mce_visualchars {background-position:-840px -20px}
|
||||
.typechoSkin span.mce_abbr {background-position:-860px -20px}
|
||||
.typechoSkin span.mce_acronym {background-position:-880px -20px}
|
||||
.typechoSkin span.mce_attribs {background-position:-900px -20px}
|
||||
.typechoSkin span.mce_cite {background-position:-920px -20px}
|
||||
.typechoSkin span.mce_del {background-position:-940px -20px}
|
||||
.typechoSkin span.mce_ins {background-position:-960px -20px}
|
||||
.typechoSkin span.mce_morebreak {background-position:0 -40px}
|
||||
.typechoSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<title>{#advanced_dlg.code_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/source_editor.js"></script>
|
||||
</head>
|
||||
<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
|
||||
<form name="source" onsubmit="saveContent();return false;" action="#">
|
||||
<div style="float: left" class="title">{#advanced_dlg.code_title}</div>
|
||||
|
||||
<div id="wrapline" style="float: right">
|
||||
<input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" name="insert" value="{#update}" id="insert" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<title>{#advanced_dlg.code_title}</title>
|
||||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/source_editor.js"></script>
|
||||
</head>
|
||||
<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
|
||||
<form name="source" onsubmit="saveContent();return false;" action="#">
|
||||
<div style="float: left" class="title">{#advanced_dlg.code_title}</div>
|
||||
|
||||
<div id="wrapline" style="float: right">
|
||||
<input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<div style="float: left">
|
||||
<input type="submit" name="insert" value="{#update}" id="insert" />
|
||||
</div>
|
||||
|
||||
<div style="float: right">
|
||||
<input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,69 +1,69 @@
|
||||
/**
|
||||
* $Id: editable_selects.js 867 2008-06-09 20:33:40Z spocke $
|
||||
*
|
||||
* Makes select boxes editable.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
var TinyMCE_EditableSelects = {
|
||||
editSelectElm : null,
|
||||
|
||||
init : function() {
|
||||
var nl = document.getElementsByTagName("select"), i, d = document, o;
|
||||
|
||||
for (i=0; i<nl.length; i++) {
|
||||
if (nl[i].className.indexOf('mceEditableSelect') != -1) {
|
||||
o = new Option('(value)', '__mce_add_custom__');
|
||||
|
||||
o.className = 'mceAddSelectValue';
|
||||
|
||||
nl[i].options[nl[i].options.length] = o;
|
||||
nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onChangeEditableSelect : function(e) {
|
||||
var d = document, ne, se = window.event ? window.event.srcElement : e.target;
|
||||
|
||||
if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
|
||||
ne = d.createElement("input");
|
||||
ne.id = se.id + "_custom";
|
||||
ne.name = se.name + "_custom";
|
||||
ne.type = "text";
|
||||
|
||||
ne.style.width = se.offsetWidth + 'px';
|
||||
se.parentNode.insertBefore(ne, se);
|
||||
se.style.display = 'none';
|
||||
ne.focus();
|
||||
ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
|
||||
ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;
|
||||
TinyMCE_EditableSelects.editSelectElm = se;
|
||||
}
|
||||
},
|
||||
|
||||
onBlurEditableSelectInput : function() {
|
||||
var se = TinyMCE_EditableSelects.editSelectElm;
|
||||
|
||||
if (se) {
|
||||
if (se.previousSibling.value != '') {
|
||||
addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
|
||||
selectByValue(document.forms[0], se.id, se.previousSibling.value);
|
||||
} else
|
||||
selectByValue(document.forms[0], se.id, '');
|
||||
|
||||
se.style.display = 'inline';
|
||||
se.parentNode.removeChild(se.previousSibling);
|
||||
TinyMCE_EditableSelects.editSelectElm = null;
|
||||
}
|
||||
},
|
||||
|
||||
onKeyDown : function(e) {
|
||||
e = e || window.event;
|
||||
|
||||
if (e.keyCode == 13)
|
||||
TinyMCE_EditableSelects.onBlurEditableSelectInput();
|
||||
}
|
||||
};
|
||||
/**
|
||||
* $Id: editable_selects.js 867 2008-06-09 20:33:40Z spocke $
|
||||
*
|
||||
* Makes select boxes editable.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
var TinyMCE_EditableSelects = {
|
||||
editSelectElm : null,
|
||||
|
||||
init : function() {
|
||||
var nl = document.getElementsByTagName("select"), i, d = document, o;
|
||||
|
||||
for (i=0; i<nl.length; i++) {
|
||||
if (nl[i].className.indexOf('mceEditableSelect') != -1) {
|
||||
o = new Option('(value)', '__mce_add_custom__');
|
||||
|
||||
o.className = 'mceAddSelectValue';
|
||||
|
||||
nl[i].options[nl[i].options.length] = o;
|
||||
nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onChangeEditableSelect : function(e) {
|
||||
var d = document, ne, se = window.event ? window.event.srcElement : e.target;
|
||||
|
||||
if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
|
||||
ne = d.createElement("input");
|
||||
ne.id = se.id + "_custom";
|
||||
ne.name = se.name + "_custom";
|
||||
ne.type = "text";
|
||||
|
||||
ne.style.width = se.offsetWidth + 'px';
|
||||
se.parentNode.insertBefore(ne, se);
|
||||
se.style.display = 'none';
|
||||
ne.focus();
|
||||
ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
|
||||
ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;
|
||||
TinyMCE_EditableSelects.editSelectElm = se;
|
||||
}
|
||||
},
|
||||
|
||||
onBlurEditableSelectInput : function() {
|
||||
var se = TinyMCE_EditableSelects.editSelectElm;
|
||||
|
||||
if (se) {
|
||||
if (se.previousSibling.value != '') {
|
||||
addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
|
||||
selectByValue(document.forms[0], se.id, se.previousSibling.value);
|
||||
} else
|
||||
selectByValue(document.forms[0], se.id, '');
|
||||
|
||||
se.style.display = 'inline';
|
||||
se.parentNode.removeChild(se.previousSibling);
|
||||
TinyMCE_EditableSelects.editSelectElm = null;
|
||||
}
|
||||
},
|
||||
|
||||
onKeyDown : function(e) {
|
||||
e = e || window.event;
|
||||
|
||||
if (e.keyCode == 13)
|
||||
TinyMCE_EditableSelects.onBlurEditableSelectInput();
|
||||
}
|
||||
};
|
||||
|
||||
398
usr/plugins/TinyMCE/tiny_mce/utils/form_utils.js
vendored
398
usr/plugins/TinyMCE/tiny_mce/utils/form_utils.js
vendored
@@ -1,199 +1,199 @@
|
||||
/**
|
||||
* $Id: form_utils.js 1184 2009-08-11 11:47:27Z spocke $
|
||||
*
|
||||
* Various form utilitiy functions.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
|
||||
|
||||
function getColorPickerHTML(id, target_form_element) {
|
||||
var h = "";
|
||||
|
||||
h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
|
||||
h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"> </span></a>';
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
function updateColor(img_id, form_element_id) {
|
||||
document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
|
||||
}
|
||||
|
||||
function setBrowserDisabled(id, state) {
|
||||
var img = document.getElementById(id);
|
||||
var lnk = document.getElementById(id + "_link");
|
||||
|
||||
if (lnk) {
|
||||
if (state) {
|
||||
lnk.setAttribute("realhref", lnk.getAttribute("href"));
|
||||
lnk.removeAttribute("href");
|
||||
tinyMCEPopup.dom.addClass(img, 'disabled');
|
||||
} else {
|
||||
if (lnk.getAttribute("realhref"))
|
||||
lnk.setAttribute("href", lnk.getAttribute("realhref"));
|
||||
|
||||
tinyMCEPopup.dom.removeClass(img, 'disabled');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getBrowserHTML(id, target_form_element, type, prefix) {
|
||||
var option = prefix + "_" + type + "_browser_callback", cb, html;
|
||||
|
||||
cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
|
||||
|
||||
if (!cb)
|
||||
return "";
|
||||
|
||||
html = "";
|
||||
html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
|
||||
html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"> </span></a>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function openBrowser(img_id, target_form_element, type, option) {
|
||||
var img = document.getElementById(img_id);
|
||||
|
||||
if (img.className != "mceButtonDisabled")
|
||||
tinyMCEPopup.openBrowser(target_form_element, type, option);
|
||||
}
|
||||
|
||||
function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
|
||||
if (!form_obj || !form_obj.elements[field_name])
|
||||
return;
|
||||
|
||||
var sel = form_obj.elements[field_name];
|
||||
|
||||
var found = false;
|
||||
for (var i=0; i<sel.options.length; i++) {
|
||||
var option = sel.options[i];
|
||||
|
||||
if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
|
||||
option.selected = true;
|
||||
found = true;
|
||||
} else
|
||||
option.selected = false;
|
||||
}
|
||||
|
||||
if (!found && add_custom && value != '') {
|
||||
var option = new Option(value, value);
|
||||
option.selected = true;
|
||||
sel.options[sel.options.length] = option;
|
||||
sel.selectedIndex = sel.options.length - 1;
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
function getSelectValue(form_obj, field_name) {
|
||||
var elm = form_obj.elements[field_name];
|
||||
|
||||
if (elm == null || elm.options == null || elm.selectedIndex === -1)
|
||||
return "";
|
||||
|
||||
return elm.options[elm.selectedIndex].value;
|
||||
}
|
||||
|
||||
function addSelectValue(form_obj, field_name, name, value) {
|
||||
var s = form_obj.elements[field_name];
|
||||
var o = new Option(name, value);
|
||||
s.options[s.options.length] = o;
|
||||
}
|
||||
|
||||
function addClassesToList(list_id, specific_option) {
|
||||
// Setup class droplist
|
||||
var styleSelectElm = document.getElementById(list_id);
|
||||
var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
|
||||
styles = tinyMCEPopup.getParam(specific_option, styles);
|
||||
|
||||
if (styles) {
|
||||
var stylesAr = styles.split(';');
|
||||
|
||||
for (var i=0; i<stylesAr.length; i++) {
|
||||
if (stylesAr != "") {
|
||||
var key, value;
|
||||
|
||||
key = stylesAr[i].split('=')[0];
|
||||
value = stylesAr[i].split('=')[1];
|
||||
|
||||
styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
|
||||
styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function isVisible(element_id) {
|
||||
var elm = document.getElementById(element_id);
|
||||
|
||||
return elm && elm.style.display != "none";
|
||||
}
|
||||
|
||||
function convertRGBToHex(col) {
|
||||
var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
|
||||
|
||||
var rgb = col.replace(re, "$1,$2,$3").split(',');
|
||||
if (rgb.length == 3) {
|
||||
r = parseInt(rgb[0]).toString(16);
|
||||
g = parseInt(rgb[1]).toString(16);
|
||||
b = parseInt(rgb[2]).toString(16);
|
||||
|
||||
r = r.length == 1 ? '0' + r : r;
|
||||
g = g.length == 1 ? '0' + g : g;
|
||||
b = b.length == 1 ? '0' + b : b;
|
||||
|
||||
return "#" + r + g + b;
|
||||
}
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
function convertHexToRGB(col) {
|
||||
if (col.indexOf('#') != -1) {
|
||||
col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
|
||||
|
||||
r = parseInt(col.substring(0, 2), 16);
|
||||
g = parseInt(col.substring(2, 4), 16);
|
||||
b = parseInt(col.substring(4, 6), 16);
|
||||
|
||||
return "rgb(" + r + "," + g + "," + b + ")";
|
||||
}
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
function trimSize(size) {
|
||||
return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
|
||||
}
|
||||
|
||||
function getCSSSize(size) {
|
||||
size = trimSize(size);
|
||||
|
||||
if (size == "")
|
||||
return "";
|
||||
|
||||
// Add px
|
||||
if (/^[0-9]+$/.test(size))
|
||||
size += 'px';
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
function getStyle(elm, attrib, style) {
|
||||
var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
|
||||
|
||||
if (val != '')
|
||||
return '' + val;
|
||||
|
||||
if (typeof(style) == 'undefined')
|
||||
style = attrib;
|
||||
|
||||
return tinyMCEPopup.dom.getStyle(elm, style);
|
||||
}
|
||||
/**
|
||||
* $Id: form_utils.js 1184 2009-08-11 11:47:27Z spocke $
|
||||
*
|
||||
* Various form utilitiy functions.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
|
||||
|
||||
function getColorPickerHTML(id, target_form_element) {
|
||||
var h = "";
|
||||
|
||||
h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
|
||||
h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"> </span></a>';
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
function updateColor(img_id, form_element_id) {
|
||||
document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
|
||||
}
|
||||
|
||||
function setBrowserDisabled(id, state) {
|
||||
var img = document.getElementById(id);
|
||||
var lnk = document.getElementById(id + "_link");
|
||||
|
||||
if (lnk) {
|
||||
if (state) {
|
||||
lnk.setAttribute("realhref", lnk.getAttribute("href"));
|
||||
lnk.removeAttribute("href");
|
||||
tinyMCEPopup.dom.addClass(img, 'disabled');
|
||||
} else {
|
||||
if (lnk.getAttribute("realhref"))
|
||||
lnk.setAttribute("href", lnk.getAttribute("realhref"));
|
||||
|
||||
tinyMCEPopup.dom.removeClass(img, 'disabled');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getBrowserHTML(id, target_form_element, type, prefix) {
|
||||
var option = prefix + "_" + type + "_browser_callback", cb, html;
|
||||
|
||||
cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
|
||||
|
||||
if (!cb)
|
||||
return "";
|
||||
|
||||
html = "";
|
||||
html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
|
||||
html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"> </span></a>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function openBrowser(img_id, target_form_element, type, option) {
|
||||
var img = document.getElementById(img_id);
|
||||
|
||||
if (img.className != "mceButtonDisabled")
|
||||
tinyMCEPopup.openBrowser(target_form_element, type, option);
|
||||
}
|
||||
|
||||
function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
|
||||
if (!form_obj || !form_obj.elements[field_name])
|
||||
return;
|
||||
|
||||
var sel = form_obj.elements[field_name];
|
||||
|
||||
var found = false;
|
||||
for (var i=0; i<sel.options.length; i++) {
|
||||
var option = sel.options[i];
|
||||
|
||||
if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
|
||||
option.selected = true;
|
||||
found = true;
|
||||
} else
|
||||
option.selected = false;
|
||||
}
|
||||
|
||||
if (!found && add_custom && value != '') {
|
||||
var option = new Option(value, value);
|
||||
option.selected = true;
|
||||
sel.options[sel.options.length] = option;
|
||||
sel.selectedIndex = sel.options.length - 1;
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
function getSelectValue(form_obj, field_name) {
|
||||
var elm = form_obj.elements[field_name];
|
||||
|
||||
if (elm == null || elm.options == null || elm.selectedIndex === -1)
|
||||
return "";
|
||||
|
||||
return elm.options[elm.selectedIndex].value;
|
||||
}
|
||||
|
||||
function addSelectValue(form_obj, field_name, name, value) {
|
||||
var s = form_obj.elements[field_name];
|
||||
var o = new Option(name, value);
|
||||
s.options[s.options.length] = o;
|
||||
}
|
||||
|
||||
function addClassesToList(list_id, specific_option) {
|
||||
// Setup class droplist
|
||||
var styleSelectElm = document.getElementById(list_id);
|
||||
var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
|
||||
styles = tinyMCEPopup.getParam(specific_option, styles);
|
||||
|
||||
if (styles) {
|
||||
var stylesAr = styles.split(';');
|
||||
|
||||
for (var i=0; i<stylesAr.length; i++) {
|
||||
if (stylesAr != "") {
|
||||
var key, value;
|
||||
|
||||
key = stylesAr[i].split('=')[0];
|
||||
value = stylesAr[i].split('=')[1];
|
||||
|
||||
styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
|
||||
styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function isVisible(element_id) {
|
||||
var elm = document.getElementById(element_id);
|
||||
|
||||
return elm && elm.style.display != "none";
|
||||
}
|
||||
|
||||
function convertRGBToHex(col) {
|
||||
var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
|
||||
|
||||
var rgb = col.replace(re, "$1,$2,$3").split(',');
|
||||
if (rgb.length == 3) {
|
||||
r = parseInt(rgb[0]).toString(16);
|
||||
g = parseInt(rgb[1]).toString(16);
|
||||
b = parseInt(rgb[2]).toString(16);
|
||||
|
||||
r = r.length == 1 ? '0' + r : r;
|
||||
g = g.length == 1 ? '0' + g : g;
|
||||
b = b.length == 1 ? '0' + b : b;
|
||||
|
||||
return "#" + r + g + b;
|
||||
}
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
function convertHexToRGB(col) {
|
||||
if (col.indexOf('#') != -1) {
|
||||
col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
|
||||
|
||||
r = parseInt(col.substring(0, 2), 16);
|
||||
g = parseInt(col.substring(2, 4), 16);
|
||||
b = parseInt(col.substring(4, 6), 16);
|
||||
|
||||
return "rgb(" + r + "," + g + "," + b + ")";
|
||||
}
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
function trimSize(size) {
|
||||
return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
|
||||
}
|
||||
|
||||
function getCSSSize(size) {
|
||||
size = trimSize(size);
|
||||
|
||||
if (size == "")
|
||||
return "";
|
||||
|
||||
// Add px
|
||||
if (/^[0-9]+$/.test(size))
|
||||
size += 'px';
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
function getStyle(elm, attrib, style) {
|
||||
var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
|
||||
|
||||
if (val != '')
|
||||
return '' + val;
|
||||
|
||||
if (typeof(style) == 'undefined')
|
||||
style = attrib;
|
||||
|
||||
return tinyMCEPopup.dom.getStyle(elm, style);
|
||||
}
|
||||
|
||||
152
usr/plugins/TinyMCE/tiny_mce/utils/mctabs.js
vendored
152
usr/plugins/TinyMCE/tiny_mce/utils/mctabs.js
vendored
@@ -1,76 +1,76 @@
|
||||
/**
|
||||
* $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $
|
||||
*
|
||||
* Moxiecode DHTML Tabs script.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
function MCTabs() {
|
||||
this.settings = [];
|
||||
};
|
||||
|
||||
MCTabs.prototype.init = function(settings) {
|
||||
this.settings = settings;
|
||||
};
|
||||
|
||||
MCTabs.prototype.getParam = function(name, default_value) {
|
||||
var value = null;
|
||||
|
||||
value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
|
||||
|
||||
// Fix bool values
|
||||
if (value == "true" || value == "false")
|
||||
return (value == "true");
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
MCTabs.prototype.displayTab = function(tab_id, panel_id) {
|
||||
var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;
|
||||
|
||||
panelElm= document.getElementById(panel_id);
|
||||
panelContainerElm = panelElm ? panelElm.parentNode : null;
|
||||
tabElm = document.getElementById(tab_id);
|
||||
tabContainerElm = tabElm ? tabElm.parentNode : null;
|
||||
selectionClass = this.getParam('selection_class', 'current');
|
||||
|
||||
if (tabElm && tabContainerElm) {
|
||||
nodes = tabContainerElm.childNodes;
|
||||
|
||||
// Hide all other tabs
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
if (nodes[i].nodeName == "LI")
|
||||
nodes[i].className = '';
|
||||
}
|
||||
|
||||
// Show selected tab
|
||||
tabElm.className = 'current';
|
||||
}
|
||||
|
||||
if (panelElm && panelContainerElm) {
|
||||
nodes = panelContainerElm.childNodes;
|
||||
|
||||
// Hide all other panels
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
if (nodes[i].nodeName == "DIV")
|
||||
nodes[i].className = 'panel';
|
||||
}
|
||||
|
||||
// Show selected panel
|
||||
panelElm.className = 'current';
|
||||
}
|
||||
};
|
||||
|
||||
MCTabs.prototype.getAnchor = function() {
|
||||
var pos, url = document.location.href;
|
||||
|
||||
if ((pos = url.lastIndexOf('#')) != -1)
|
||||
return url.substring(pos + 1);
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
// Global instance
|
||||
var mcTabs = new MCTabs();
|
||||
/**
|
||||
* $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $
|
||||
*
|
||||
* Moxiecode DHTML Tabs script.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
function MCTabs() {
|
||||
this.settings = [];
|
||||
};
|
||||
|
||||
MCTabs.prototype.init = function(settings) {
|
||||
this.settings = settings;
|
||||
};
|
||||
|
||||
MCTabs.prototype.getParam = function(name, default_value) {
|
||||
var value = null;
|
||||
|
||||
value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
|
||||
|
||||
// Fix bool values
|
||||
if (value == "true" || value == "false")
|
||||
return (value == "true");
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
MCTabs.prototype.displayTab = function(tab_id, panel_id) {
|
||||
var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;
|
||||
|
||||
panelElm= document.getElementById(panel_id);
|
||||
panelContainerElm = panelElm ? panelElm.parentNode : null;
|
||||
tabElm = document.getElementById(tab_id);
|
||||
tabContainerElm = tabElm ? tabElm.parentNode : null;
|
||||
selectionClass = this.getParam('selection_class', 'current');
|
||||
|
||||
if (tabElm && tabContainerElm) {
|
||||
nodes = tabContainerElm.childNodes;
|
||||
|
||||
// Hide all other tabs
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
if (nodes[i].nodeName == "LI")
|
||||
nodes[i].className = '';
|
||||
}
|
||||
|
||||
// Show selected tab
|
||||
tabElm.className = 'current';
|
||||
}
|
||||
|
||||
if (panelElm && panelContainerElm) {
|
||||
nodes = panelContainerElm.childNodes;
|
||||
|
||||
// Hide all other panels
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
if (nodes[i].nodeName == "DIV")
|
||||
nodes[i].className = 'panel';
|
||||
}
|
||||
|
||||
// Show selected panel
|
||||
panelElm.className = 'current';
|
||||
}
|
||||
};
|
||||
|
||||
MCTabs.prototype.getAnchor = function() {
|
||||
var pos, url = document.location.href;
|
||||
|
||||
if ((pos = url.lastIndexOf('#')) != -1)
|
||||
return url.substring(pos + 1);
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
// Global instance
|
||||
var mcTabs = new MCTabs();
|
||||
|
||||
438
usr/plugins/TinyMCE/tiny_mce/utils/validate.js
vendored
438
usr/plugins/TinyMCE/tiny_mce/utils/validate.js
vendored
@@ -1,219 +1,219 @@
|
||||
/**
|
||||
* $Id: validate.js 758 2008-03-30 13:53:29Z spocke $
|
||||
*
|
||||
* Various form validation methods.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
// String validation:
|
||||
|
||||
if (!Validator.isEmail('myemail'))
|
||||
alert('Invalid email.');
|
||||
|
||||
// Form validation:
|
||||
|
||||
var f = document.forms['myform'];
|
||||
|
||||
if (!Validator.isEmail(f.myemail))
|
||||
alert('Invalid email.');
|
||||
*/
|
||||
|
||||
var Validator = {
|
||||
isEmail : function(s) {
|
||||
return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
|
||||
},
|
||||
|
||||
isAbsUrl : function(s) {
|
||||
return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
|
||||
},
|
||||
|
||||
isSize : function(s) {
|
||||
return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
|
||||
},
|
||||
|
||||
isId : function(s) {
|
||||
return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
|
||||
},
|
||||
|
||||
isEmpty : function(s) {
|
||||
var nl, i;
|
||||
|
||||
if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
|
||||
return true;
|
||||
|
||||
if (s.type == 'checkbox' && !s.checked)
|
||||
return true;
|
||||
|
||||
if (s.type == 'radio') {
|
||||
for (i=0, nl = s.form.elements; i<nl.length; i++) {
|
||||
if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
|
||||
},
|
||||
|
||||
isNumber : function(s, d) {
|
||||
return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
|
||||
},
|
||||
|
||||
test : function(s, p) {
|
||||
s = s.nodeType == 1 ? s.value : s;
|
||||
|
||||
return s == '' || new RegExp(p).test(s);
|
||||
}
|
||||
};
|
||||
|
||||
var AutoValidator = {
|
||||
settings : {
|
||||
id_cls : 'id',
|
||||
int_cls : 'int',
|
||||
url_cls : 'url',
|
||||
number_cls : 'number',
|
||||
email_cls : 'email',
|
||||
size_cls : 'size',
|
||||
required_cls : 'required',
|
||||
invalid_cls : 'invalid',
|
||||
min_cls : 'min',
|
||||
max_cls : 'max'
|
||||
},
|
||||
|
||||
init : function(s) {
|
||||
var n;
|
||||
|
||||
for (n in s)
|
||||
this.settings[n] = s[n];
|
||||
},
|
||||
|
||||
validate : function(f) {
|
||||
var i, nl, s = this.settings, c = 0;
|
||||
|
||||
nl = this.tags(f, 'label');
|
||||
for (i=0; i<nl.length; i++)
|
||||
this.removeClass(nl[i], s.invalid_cls);
|
||||
|
||||
c += this.validateElms(f, 'input');
|
||||
c += this.validateElms(f, 'select');
|
||||
c += this.validateElms(f, 'textarea');
|
||||
|
||||
return c == 3;
|
||||
},
|
||||
|
||||
invalidate : function(n) {
|
||||
this.mark(n.form, n);
|
||||
},
|
||||
|
||||
reset : function(e) {
|
||||
var t = ['label', 'input', 'select', 'textarea'];
|
||||
var i, j, nl, s = this.settings;
|
||||
|
||||
if (e == null)
|
||||
return;
|
||||
|
||||
for (i=0; i<t.length; i++) {
|
||||
nl = this.tags(e.form ? e.form : e, t[i]);
|
||||
for (j=0; j<nl.length; j++)
|
||||
this.removeClass(nl[j], s.invalid_cls);
|
||||
}
|
||||
},
|
||||
|
||||
validateElms : function(f, e) {
|
||||
var nl, i, n, s = this.settings, st = true, va = Validator, v;
|
||||
|
||||
nl = this.tags(f, e);
|
||||
for (i=0; i<nl.length; i++) {
|
||||
n = nl[i];
|
||||
|
||||
this.removeClass(n, s.invalid_cls);
|
||||
|
||||
if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.size_cls) && !va.isSize(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.id_cls) && !va.isId(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.min_cls, true)) {
|
||||
v = this.getNum(n, s.min_cls);
|
||||
|
||||
if (isNaN(v) || parseInt(n.value) < parseInt(v))
|
||||
st = this.mark(f, n);
|
||||
}
|
||||
|
||||
if (this.hasClass(n, s.max_cls, true)) {
|
||||
v = this.getNum(n, s.max_cls);
|
||||
|
||||
if (isNaN(v) || parseInt(n.value) > parseInt(v))
|
||||
st = this.mark(f, n);
|
||||
}
|
||||
}
|
||||
|
||||
return st;
|
||||
},
|
||||
|
||||
hasClass : function(n, c, d) {
|
||||
return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
|
||||
},
|
||||
|
||||
getNum : function(n, c) {
|
||||
c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
|
||||
c = c.replace(/[^0-9]/g, '');
|
||||
|
||||
return c;
|
||||
},
|
||||
|
||||
addClass : function(n, c, b) {
|
||||
var o = this.removeClass(n, c);
|
||||
n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
|
||||
},
|
||||
|
||||
removeClass : function(n, c) {
|
||||
c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
|
||||
return n.className = c != ' ' ? c : '';
|
||||
},
|
||||
|
||||
tags : function(f, s) {
|
||||
return f.getElementsByTagName(s);
|
||||
},
|
||||
|
||||
mark : function(f, n) {
|
||||
var s = this.settings;
|
||||
|
||||
this.addClass(n, s.invalid_cls);
|
||||
this.markLabels(f, n, s.invalid_cls);
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
markLabels : function(f, n, ic) {
|
||||
var nl, i;
|
||||
|
||||
nl = this.tags(f, "label");
|
||||
for (i=0; i<nl.length; i++) {
|
||||
if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
|
||||
this.addClass(nl[i], ic);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* $Id: validate.js 758 2008-03-30 13:53:29Z spocke $
|
||||
*
|
||||
* Various form validation methods.
|
||||
*
|
||||
* @author Moxiecode
|
||||
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
// String validation:
|
||||
|
||||
if (!Validator.isEmail('myemail'))
|
||||
alert('Invalid email.');
|
||||
|
||||
// Form validation:
|
||||
|
||||
var f = document.forms['myform'];
|
||||
|
||||
if (!Validator.isEmail(f.myemail))
|
||||
alert('Invalid email.');
|
||||
*/
|
||||
|
||||
var Validator = {
|
||||
isEmail : function(s) {
|
||||
return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
|
||||
},
|
||||
|
||||
isAbsUrl : function(s) {
|
||||
return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
|
||||
},
|
||||
|
||||
isSize : function(s) {
|
||||
return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
|
||||
},
|
||||
|
||||
isId : function(s) {
|
||||
return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
|
||||
},
|
||||
|
||||
isEmpty : function(s) {
|
||||
var nl, i;
|
||||
|
||||
if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
|
||||
return true;
|
||||
|
||||
if (s.type == 'checkbox' && !s.checked)
|
||||
return true;
|
||||
|
||||
if (s.type == 'radio') {
|
||||
for (i=0, nl = s.form.elements; i<nl.length; i++) {
|
||||
if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
|
||||
},
|
||||
|
||||
isNumber : function(s, d) {
|
||||
return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
|
||||
},
|
||||
|
||||
test : function(s, p) {
|
||||
s = s.nodeType == 1 ? s.value : s;
|
||||
|
||||
return s == '' || new RegExp(p).test(s);
|
||||
}
|
||||
};
|
||||
|
||||
var AutoValidator = {
|
||||
settings : {
|
||||
id_cls : 'id',
|
||||
int_cls : 'int',
|
||||
url_cls : 'url',
|
||||
number_cls : 'number',
|
||||
email_cls : 'email',
|
||||
size_cls : 'size',
|
||||
required_cls : 'required',
|
||||
invalid_cls : 'invalid',
|
||||
min_cls : 'min',
|
||||
max_cls : 'max'
|
||||
},
|
||||
|
||||
init : function(s) {
|
||||
var n;
|
||||
|
||||
for (n in s)
|
||||
this.settings[n] = s[n];
|
||||
},
|
||||
|
||||
validate : function(f) {
|
||||
var i, nl, s = this.settings, c = 0;
|
||||
|
||||
nl = this.tags(f, 'label');
|
||||
for (i=0; i<nl.length; i++)
|
||||
this.removeClass(nl[i], s.invalid_cls);
|
||||
|
||||
c += this.validateElms(f, 'input');
|
||||
c += this.validateElms(f, 'select');
|
||||
c += this.validateElms(f, 'textarea');
|
||||
|
||||
return c == 3;
|
||||
},
|
||||
|
||||
invalidate : function(n) {
|
||||
this.mark(n.form, n);
|
||||
},
|
||||
|
||||
reset : function(e) {
|
||||
var t = ['label', 'input', 'select', 'textarea'];
|
||||
var i, j, nl, s = this.settings;
|
||||
|
||||
if (e == null)
|
||||
return;
|
||||
|
||||
for (i=0; i<t.length; i++) {
|
||||
nl = this.tags(e.form ? e.form : e, t[i]);
|
||||
for (j=0; j<nl.length; j++)
|
||||
this.removeClass(nl[j], s.invalid_cls);
|
||||
}
|
||||
},
|
||||
|
||||
validateElms : function(f, e) {
|
||||
var nl, i, n, s = this.settings, st = true, va = Validator, v;
|
||||
|
||||
nl = this.tags(f, e);
|
||||
for (i=0; i<nl.length; i++) {
|
||||
n = nl[i];
|
||||
|
||||
this.removeClass(n, s.invalid_cls);
|
||||
|
||||
if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.size_cls) && !va.isSize(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.id_cls) && !va.isId(n))
|
||||
st = this.mark(f, n);
|
||||
|
||||
if (this.hasClass(n, s.min_cls, true)) {
|
||||
v = this.getNum(n, s.min_cls);
|
||||
|
||||
if (isNaN(v) || parseInt(n.value) < parseInt(v))
|
||||
st = this.mark(f, n);
|
||||
}
|
||||
|
||||
if (this.hasClass(n, s.max_cls, true)) {
|
||||
v = this.getNum(n, s.max_cls);
|
||||
|
||||
if (isNaN(v) || parseInt(n.value) > parseInt(v))
|
||||
st = this.mark(f, n);
|
||||
}
|
||||
}
|
||||
|
||||
return st;
|
||||
},
|
||||
|
||||
hasClass : function(n, c, d) {
|
||||
return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
|
||||
},
|
||||
|
||||
getNum : function(n, c) {
|
||||
c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
|
||||
c = c.replace(/[^0-9]/g, '');
|
||||
|
||||
return c;
|
||||
},
|
||||
|
||||
addClass : function(n, c, b) {
|
||||
var o = this.removeClass(n, c);
|
||||
n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
|
||||
},
|
||||
|
||||
removeClass : function(n, c) {
|
||||
c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
|
||||
return n.className = c != ' ' ? c : '';
|
||||
},
|
||||
|
||||
tags : function(f, s) {
|
||||
return f.getElementsByTagName(s);
|
||||
},
|
||||
|
||||
mark : function(f, n) {
|
||||
var s = this.settings;
|
||||
|
||||
this.addClass(n, s.invalid_cls);
|
||||
this.markLabels(f, n, s.invalid_cls);
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
markLabels : function(f, n, ic) {
|
||||
var nl, i;
|
||||
|
||||
nl = this.tags(f, "label");
|
||||
for (i=0; i<nl.length; i++) {
|
||||
if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
|
||||
this.addClass(nl[i], ic);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2250,7 +2250,7 @@ var zen_editor = (function(){
|
||||
* @author Sergey Chikuyonok (serge.che@gmail.com)
|
||||
* @link http://chikuyonok.ru
|
||||
*
|
||||
* @include "editor.js"
|
||||
* @include "editor.js"
|
||||
* @include "../../aptana/lib/html_matcher.js"
|
||||
* @include "../../aptana/lib/zen_coding.js"
|
||||
*/
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-tb-8 col-tb-offset-2">
|
||||
|
||||
<div class="error-page">
|
||||
<h2 class="post-title">404 - <?php _e('页面没找到'); ?></h2>
|
||||
<p><?php _e('你想查看的页面已被转移或删除了,要不要搜索看看:'); ?></p>
|
||||
<form method="post">
|
||||
<p><input type="text" name="s" class="text" autofocus /></p>
|
||||
<p><button type="submit" class="submit"><?php _e('搜索'); ?></button></p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div><!-- end #content-->
|
||||
<?php $this->need('footer.php'); ?>
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-tb-8 col-tb-offset-2">
|
||||
|
||||
<div class="error-page">
|
||||
<h2 class="post-title">404 - <?php _e('页面没找到'); ?></h2>
|
||||
<p><?php _e('你想查看的页面已被转移或删除了,要不要搜索看看:'); ?></p>
|
||||
<form method="post">
|
||||
<p><input type="text" name="s" class="text" autofocus /></p>
|
||||
<p><button type="submit" class="submit"><?php _e('搜索'); ?></button></p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div><!-- end #content-->
|
||||
<?php $this->need('footer.php'); ?>
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<h3 class="archive-title"><?php $this->archiveTitle(array(
|
||||
'category' => _t('分类 %s 下的文章'),
|
||||
'search' => _t('包含关键字 %s 的文章'),
|
||||
'tag' => _t('标签 %s 下的文章'),
|
||||
'author' => _t('%s 发布的文章')
|
||||
), '', ''); ?></h3>
|
||||
<?php if ($this->have()): ?>
|
||||
<?php while($this->next()): ?>
|
||||
<article class="post">
|
||||
<h2 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h2>
|
||||
<ul class="post-meta">
|
||||
<li><?php _e('作者:'); ?><a href="<?php $this->author->permalink(); ?>"><?php $this->author(); ?></a></li>
|
||||
<li><?php _e('时间:'); ?><?php $this->date('F j, Y'); ?></li>
|
||||
<li><?php _e('分类:'); ?><?php $this->category(','); ?></li>
|
||||
<li><a href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('评论', '1 条评论', '%d 条评论'); ?></a></li>
|
||||
</ul>
|
||||
<div class="post-content">
|
||||
<?php $this->content('- 阅读剩余部分 -'); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
<?php else: ?>
|
||||
<article class="post">
|
||||
<h2 class="post-title"><?php _e('没有找到内容'); ?></h2>
|
||||
</article>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php $this->pageNav('« 前一页', '后一页 »'); ?>
|
||||
</div><!-- end #main -->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<h3 class="archive-title"><?php $this->archiveTitle(array(
|
||||
'category' => _t('分类 %s 下的文章'),
|
||||
'search' => _t('包含关键字 %s 的文章'),
|
||||
'tag' => _t('标签 %s 下的文章'),
|
||||
'author' => _t('%s 发布的文章')
|
||||
), '', ''); ?></h3>
|
||||
<?php if ($this->have()): ?>
|
||||
<?php while($this->next()): ?>
|
||||
<article class="post">
|
||||
<h2 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h2>
|
||||
<ul class="post-meta">
|
||||
<li><?php _e('作者:'); ?><a href="<?php $this->author->permalink(); ?>"><?php $this->author(); ?></a></li>
|
||||
<li><?php _e('时间:'); ?><?php $this->date('F j, Y'); ?></li>
|
||||
<li><?php _e('分类:'); ?><?php $this->category(','); ?></li>
|
||||
<li><a href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('评论', '1 条评论', '%d 条评论'); ?></a></li>
|
||||
</ul>
|
||||
<div class="post-content">
|
||||
<?php $this->content('- 阅读剩余部分 -'); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
<?php else: ?>
|
||||
<article class="post">
|
||||
<h2 class="post-title"><?php _e('没有找到内容'); ?></h2>
|
||||
</article>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php $this->pageNav('« 前一页', '后一页 »'); ?>
|
||||
</div><!-- end #main -->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
|
||||
@@ -1,48 +1,48 @@
|
||||
<div id="comments">
|
||||
<?php $this->comments()->to($comments); ?>
|
||||
<?php if ($comments->have()): ?>
|
||||
<h3><?php $this->commentsNum(_t('暂无评论'), _t('仅有 1 条评论'), _t('已有 %d 条评论')); ?></h3>
|
||||
|
||||
<?php $comments->listComments(); ?>
|
||||
|
||||
<?php $comments->pageNav('« 前一页', '后一页 »'); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if($this->allow('comment')): ?>
|
||||
<div id="<?php $this->respondId(); ?>" class="respond">
|
||||
<div class="cancel-comment-reply">
|
||||
<?php $comments->cancelReply(); ?>
|
||||
</div>
|
||||
|
||||
<h3 id="response"><?php _e('添加新评论'); ?></h3>
|
||||
<form method="post" action="<?php $this->commentUrl() ?>" id="comment-form">
|
||||
<?php if($this->user->hasLogin()): ?>
|
||||
<p><?php _e('登录身份:'); ?><a href="<?php $this->options->profileUrl(); ?>"><?php $this->user->screenName(); ?></a>. <a href="<?php $this->options->logoutUrl(); ?>" title="Logout"><?php _e('退出'); ?> »</a></p>
|
||||
<?php else: ?>
|
||||
<p>
|
||||
<label for="author" class="required"><?php _e('称呼'); ?></label>
|
||||
<input type="text" name="author" id="author" class="text" value="<?php $this->remember('author'); ?>" />
|
||||
</p>
|
||||
<p>
|
||||
<label for="mail"<?php if ($this->options->commentsRequireMail): ?> class="required"<?php endif; ?>><?php _e('Email'); ?></label>
|
||||
<input type="email" name="mail" id="mail" class="text" value="<?php $this->remember('mail'); ?>" />
|
||||
</p>
|
||||
<p>
|
||||
<label for="url"<?php if ($this->options->commentsRequireURL): ?> class="required"<?php endif; ?>><?php _e('网站'); ?></label>
|
||||
<input type="url" name="url" id="url" class="text" placeholder="<?php _e('http://example.com'); ?>" value="<?php $this->remember('url'); ?>" />
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<p>
|
||||
<label for="textarea" class="required"><?php _e('内容'); ?></label>
|
||||
<textarea rows="8" cols="50" name="text" class="textarea"><?php $this->remember('text'); ?></textarea>
|
||||
</p>
|
||||
<p>
|
||||
<button type="submit" class="submit"><?php _e('提交评论'); ?></button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<h3><?php _e('评论已关闭'); ?></h3>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div id="comments">
|
||||
<?php $this->comments()->to($comments); ?>
|
||||
<?php if ($comments->have()): ?>
|
||||
<h3><?php $this->commentsNum(_t('暂无评论'), _t('仅有 1 条评论'), _t('已有 %d 条评论')); ?></h3>
|
||||
|
||||
<?php $comments->listComments(); ?>
|
||||
|
||||
<?php $comments->pageNav('« 前一页', '后一页 »'); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if($this->allow('comment')): ?>
|
||||
<div id="<?php $this->respondId(); ?>" class="respond">
|
||||
<div class="cancel-comment-reply">
|
||||
<?php $comments->cancelReply(); ?>
|
||||
</div>
|
||||
|
||||
<h3 id="response"><?php _e('添加新评论'); ?></h3>
|
||||
<form method="post" action="<?php $this->commentUrl() ?>" id="comment-form">
|
||||
<?php if($this->user->hasLogin()): ?>
|
||||
<p><?php _e('登录身份:'); ?><a href="<?php $this->options->profileUrl(); ?>"><?php $this->user->screenName(); ?></a>. <a href="<?php $this->options->logoutUrl(); ?>" title="Logout"><?php _e('退出'); ?> »</a></p>
|
||||
<?php else: ?>
|
||||
<p>
|
||||
<label for="author" class="required"><?php _e('称呼'); ?></label>
|
||||
<input type="text" name="author" id="author" class="text" value="<?php $this->remember('author'); ?>" />
|
||||
</p>
|
||||
<p>
|
||||
<label for="mail"<?php if ($this->options->commentsRequireMail): ?> class="required"<?php endif; ?>><?php _e('Email'); ?></label>
|
||||
<input type="email" name="mail" id="mail" class="text" value="<?php $this->remember('mail'); ?>" />
|
||||
</p>
|
||||
<p>
|
||||
<label for="url"<?php if ($this->options->commentsRequireURL): ?> class="required"<?php endif; ?>><?php _e('网站'); ?></label>
|
||||
<input type="url" name="url" id="url" class="text" placeholder="<?php _e('http://example.com'); ?>" value="<?php $this->remember('url'); ?>" />
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<p>
|
||||
<label for="textarea" class="required"><?php _e('内容'); ?></label>
|
||||
<textarea rows="8" cols="50" name="text" class="textarea"><?php $this->remember('text'); ?></textarea>
|
||||
</p>
|
||||
<p>
|
||||
<button type="submit" class="submit"><?php _e('提交评论'); ?></button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<h3><?php _e('评论已关闭'); ?></h3>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* 这是 Typecho 0.9 系统的一套默认皮肤
|
||||
*
|
||||
* @package Typecho Replica Theme
|
||||
* @author Typecho Team
|
||||
* @version 1.2
|
||||
* @link http://typecho.org
|
||||
*/
|
||||
|
||||
$this->need('header.php');
|
||||
?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<?php while($this->next()): ?>
|
||||
<article class="post">
|
||||
<h2 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h2>
|
||||
<ul class="post-meta">
|
||||
<li><?php _e('作者:'); ?><a href="<?php $this->author->permalink(); ?>"><?php $this->author(); ?></a></li>
|
||||
<li><?php _e('时间:'); ?><?php $this->date('F j, Y'); ?></li>
|
||||
<li><?php _e('分类:'); ?><?php $this->category(','); ?></li>
|
||||
<li><a href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('评论', '1 条评论', '%d 条评论'); ?></a></li>
|
||||
</ul>
|
||||
<div class="post-content">
|
||||
<?php $this->content('- 阅读剩余部分 -'); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
|
||||
<?php $this->pageNav('« 前一页', '后一页 »'); ?>
|
||||
</div><!-- end #main-->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
<?php
|
||||
/**
|
||||
* 这是 Typecho 0.9 系统的一套默认皮肤
|
||||
*
|
||||
* @package Typecho Replica Theme
|
||||
* @author Typecho Team
|
||||
* @version 1.2
|
||||
* @link http://typecho.org
|
||||
*/
|
||||
|
||||
$this->need('header.php');
|
||||
?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<?php while($this->next()): ?>
|
||||
<article class="post">
|
||||
<h2 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h2>
|
||||
<ul class="post-meta">
|
||||
<li><?php _e('作者:'); ?><a href="<?php $this->author->permalink(); ?>"><?php $this->author(); ?></a></li>
|
||||
<li><?php _e('时间:'); ?><?php $this->date('F j, Y'); ?></li>
|
||||
<li><?php _e('分类:'); ?><?php $this->category(','); ?></li>
|
||||
<li><a href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('评论', '1 条评论', '%d 条评论'); ?></a></li>
|
||||
</ul>
|
||||
<div class="post-content">
|
||||
<?php $this->content('- 阅读剩余部分 -'); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php endwhile; ?>
|
||||
|
||||
<?php $this->pageNav('« 前一页', '后一页 »'); ?>
|
||||
</div><!-- end #main-->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<article class="post">
|
||||
<h1 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h1>
|
||||
<div class="post-content">
|
||||
<?php $this->content(); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php $this->need('comments.php'); ?>
|
||||
</div><!-- end #main-->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<article class="post">
|
||||
<h1 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h1>
|
||||
<div class="post-content">
|
||||
<?php $this->content(); ?>
|
||||
</div>
|
||||
</article>
|
||||
<?php $this->need('comments.php'); ?>
|
||||
</div><!-- end #main-->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<article class="post">
|
||||
<h1 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h1>
|
||||
<ul class="post-meta">
|
||||
<li><?php _e('作者:'); ?><?php $this->author(); ?></li>
|
||||
<li><?php _e('时间:'); ?><?php $this->date('F j, Y'); ?></li>
|
||||
<li><?php _e('分类:'); ?><?php $this->category(','); ?></li>
|
||||
</ul>
|
||||
<div class="post-content">
|
||||
<?php $this->content(); ?>
|
||||
</div>
|
||||
<p class="tags"><?php _e('标签:'); ?><?php $this->tags(', ', true, 'none'); ?></p>
|
||||
</article>
|
||||
|
||||
<?php $this->need('comments.php'); ?>
|
||||
</div><!-- end #main-->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
<?php $this->need('header.php'); ?>
|
||||
|
||||
<div class="col-mb-12 col-8" id="main">
|
||||
<article class="post">
|
||||
<h1 class="post-title"><a href="<?php $this->permalink() ?>"><?php $this->title() ?></a></h1>
|
||||
<ul class="post-meta">
|
||||
<li><?php _e('作者:'); ?><?php $this->author(); ?></li>
|
||||
<li><?php _e('时间:'); ?><?php $this->date('F j, Y'); ?></li>
|
||||
<li><?php _e('分类:'); ?><?php $this->category(','); ?></li>
|
||||
</ul>
|
||||
<div class="post-content">
|
||||
<?php $this->content(); ?>
|
||||
</div>
|
||||
<p class="tags"><?php _e('标签:'); ?><?php $this->tags(', ', true, 'none'); ?></p>
|
||||
</article>
|
||||
|
||||
<?php $this->need('comments.php'); ?>
|
||||
</div><!-- end #main-->
|
||||
|
||||
<?php $this->need('sidebar.php'); ?>
|
||||
<?php $this->need('footer.php'); ?>
|
||||
|
||||
Reference in New Issue
Block a user